如何在Flex(AS3)中解析ISO格式的日期?

9

如何在Flex (AS3)中将ISO日期字符串解析为日期对象?

例如:
2009-12-08T04:23:23Z
2009-12-08T04:23:23.342-04:00
等等...

3个回答

18
import com.adobe.utils.DateUtil;

var dateString:String = "2009-03-27T16:28:22.540-04:00";
var d:Date = DateUtil.parseW3CDTF(dateString);
trace(d);
var s:String = DateUtil.toW3CDTF(d);
trace(s);
[trace] 2009年3月27日16:28:22 GMT-0400
[trace] 2009-03-27T20:28:22-00:00

原来,DateUtil 处理了 W3C 时间日期格式 中的所有内容。AS3 的日期类型不保存毫秒,但如果有,则会被忽略。

请注意,W3C 输出已转换为 UTC(也称为 GMT 或 Zulu 时间)。


1
这个解决方案只能在Flex中使用,需要mx.formatters包,如果你在使用Flash就没办法了,真的很遗憾。 - Luke
4
如果不使用Flex,您可以从as3corelib中的DateUtil.as文件中复制一个方法,并将其粘贴到自己的类中:http://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/utils/DateUtil.as - George Bashi

1

将ISO格式转换为日期格式的示例函数

    public function isoToDate(value:String):Date 
    {
        var dateStr:String = value;
        dateStr = dateStr.replace(/\-/g, "/");
        dateStr = dateStr.replace("T", " ");
        dateStr = dateStr.replace("Z", " GMT-0000");

        return new Date(Date.parse(dateStr));
    }

0

Date.parse() 不支持 ISO 格式,它会返回 null。 - Chadwick
第二个链接到flexexamples博客更接近,但它只处理UTC(仅在指定带有尾随“Z”而不是时区偏移量的情况下)。感谢您的帮助! - Chadwick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接