gpt4 book ai didi

flash - Flash/AS3 中的 RFC 时间戳

转载 作者:行者123 更新时间:2023-12-01 12:02:07 24 4
gpt4 key购买 nike

我想知道 Flash/AS3 是否有任何好的方法将 AS3“日期”对象转换为 rfc-850 时间戳格式(如 HTTP 日期和最后修改时间所使用的格式)。

这个问题与this question about rfc 3339非常相似, 除了它特定于 AS3 和 rfc-850。

RFC-850 类似于:Thu, 09 Oct 2008 01:09:43 GMT

最佳答案

好的,这里有几个函数可以在 Flash 中进行 RFC-802/Date 转换。

我了解到 Date 对象实际上没有任何时区概念,并假定它处于本地时区。如果您将 RFC-802 日期传递给 Date() 构造函数,它会解析除最后的“GMT”时区标记之外的所有内容,从而得到正确的时间,但可能在错误的时区中。

从解析的 Date 中减去当前时区对此进行了补偿,因此时间戳可以与这些函数进行往返而不会变得完全错误。

(如果某人在设计Date timezone属性,那不是很棒吗?类?)

/**
* 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)))));

关于flash - Flash/AS3 中的 RFC 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/185661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com