Flash/AS3 に、AS3 の「日付」オブジェクトを rfc-850 タイムスタンプ形式 (HTTP 日付および最終更新で使用される形式) との間で変換する適切な方法があるかどうかを知りたいです。
この質問は、AS3 と rfc-850 に固有のものであることを除いて、rfc 3339 に関するこの質問と非常によく似ています。
RFC-850 は次のようなものです。Thu, 09 Oct 2008 01:09:43 GMT
Flash/AS3 に、AS3 の「日付」オブジェクトを rfc-850 タイムスタンプ形式 (HTTP 日付および最終更新で使用される形式) との間で変換する適切な方法があるかどうかを知りたいです。
この質問は、AS3 と rfc-850 に固有のものであることを除いて、rfc 3339 に関するこの質問と非常によく似ています。
RFC-850 は次のようなものです。Thu, 09 Oct 2008 01:09:43 GMT
Date
よし、 Flash でRFC-802/ 変換を行う関数をいくつか紹介しよう。
Date
オブジェクトには実際にはタイムゾーンの概念がなく、ローカルのタイムゾーンにあると想定していることを知りました。コンストラクターにRFC-802 日付を渡すと、Date()
コンストラクターは最後の "GMT" タイムゾーン トークンを除くすべてを解析するため、正しい時刻になりますが、タイムゾーンが間違っている可能性があります。
解析された Date から現在のタイムゾーンを減算すると、これが補償されるため、タイムスタンプはこれらの関数を完全に間違うことなく往復できます。
(誰かがクラスを設計するときにプロパティを組み込んでいたとしたら、それは素晴らしいことではないでしょうか?)timezone
Date
/**
* Converts an RFC string to a Date object.
*/
function fromRFC802(date:String):Date {
// Passing in an RFC802 date to the Date constructor causes flash
// to conveniently ignore the "GMT" timezone at the end, and assumes
// that it's in the Local timezone.
// If we additionally convert it back to GMT, then we're sweet.
var outputDate:Date = new Date(date);
outputDate = new Date(outputDate.time - outputDate.getTimezoneOffset()*1000*60);
return outputDate;
}
/**
* Converts a Date object to an RFC802-formatted string (GMT/UTC).
*/
function toRFC802 (date:Date):String {
// example: Thu, 09 Oct 2008 01:09:43 GMT
// Convert to GMT
var output:String = "";
// Day
switch (date.dayUTC) {
case 0: output += "Sun"; break;
case 1: output += "Mon"; break;
case 2: output += "Tue"; break;
case 3: output += "Wed"; break;
case 4: output += "Thu"; break;
case 5: output += "Fri"; break;
case 6: output += "Sat"; break;
}
output += ", ";
// Date
if (date.dateUTC < 10) {
output += "0"; // leading zero
}
output += date.dateUTC + " ";
// Month
switch(date.month) {
case 0: output += "Jan"; break;
case 1: output += "Feb"; break;
case 2: output += "Mar"; break;
case 3: output += "Apr"; break;
case 4: output += "May"; break;
case 5: output += "Jun"; break;
case 6: output += "Jul"; break;
case 7: output += "Aug"; break;
case 8: output += "Sep"; break;
case 9: output += "Oct"; break;
case 10: output += "Nov"; break;
case 11: output += "Dec"; break;
}
output += " ";
// Year
output += date.fullYearUTC + " ";
// Hours
if (date.hoursUTC < 10) {
output += "0"; // leading zero
}
output += date.hoursUTC + ":";
// Minutes
if (date.minutesUTC < 10) {
output += "0"; // leading zero
}
output += date.minutesUTC + ":";
// Seconds
if (date.seconds < 10) {
output += "0"; // leading zero
}
output += date.secondsUTC + " GMT";
return output;
}
var dateString:String = "Thu, 09 Oct 2008 01:09:43 GMT";
trace("Round trip proof:");
trace(" RFC-802: " + dateString);
trace("Date obj: " + fromRFC802(dateString));
trace(" RFC-802: " + toRFC802(fromRFC802(dateString)));
trace("Date obj: " + fromRFC802(toRFC802(fromRFC802(dateString))));
trace(" RFC-802: " + toRFC802(fromRFC802(toRFC802(fromRFC802(dateString)))));
as3corelibライブラリには、(とりわけ) DateUtil.toRFC822() および DateUtil.parseRFC822() メソッドがあります。これらがまさにあなたが探しているものであるかどうかはわかりません。
DateUtil クラスの特定のドキュメントは次のとおりです: http://as3corelib.googlecode.com/svn/trunk/docs/com/adobe/utils/DateUtil.html