如何在Flash中格式化日期?

9

我可能忽略了某些东西,但是Flash / AS3似乎缺少基本的日期格式化功能。我如何从Date中获取格式化字符串?有一些选项,如.toLocaleDateString().toUTCString(),但这有点受限。

那么,在AS3中如何格式化Date对象?


你能举个例子说明你想要日期的格式吗? - JeremyFromEarth
是的,虽然我不认为这很重要,因为一个不错的日期格式化程序应该能够处理各种自定义格式。我目前想要的日期格式如下: 2010-09-16T07:28:14+00:00 >> 2010.1609.0728 - Sietse
5个回答

30

Flash Player 10.1在flash.globalization包中添加了DateTimeFormatter。它非常灵活,但文档不够详细。

import flash.globalization.DateTimeFormatter;

var d:Date = new Date();
var dtf:DateTimeFormatter = new DateTimeFormatter("en-US");
dtf.setDateTimePattern("yyyy-MM-dd 'at' hh:mm:ssa");
trace(dtf.format(d)); 

// 2012-06-06 at 09:58:46PM

1
你也可以在DateTimeFormatter构造函数的第一个参数中添加一个方便的常量:new DateTimeFormatter(LocaleID.DEFAULT); - matt lohkamp
4
24小时格式:dtf.setDateTimePattern("yyyy-MM-dd 'at' HH:mm:ss"); - Bitterblue
5
这里是文档链接:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/globalization/DateTimeFormatter.html该链接提供了关于 Adobe Flash 平台中的全球化日期和时间格式化器的详细信息。 - weotch

2

这是一个关于自定义格式的简单示例:

    public static function getDateIso8601Long(date:Date):String {
        var str:String = date.getFullYear().toString()
        str = str +"-"+ ((String((date.getMonth()+1)).length == 1)?"0"+(date.getMonth()+1):(date.getMonth()+1)).toString()
        str = str +"-"+ ((date.getDate().toString().length == 1)?"0"+date.getDate():date.getDate()).toString()
        str = str +"T"+ ((date.getHours().toString().length == 1)?"0"+date.getHours():date.getHours()).toString()
        str = str +":"+ ((date.getMinutes().toString().length == 1)?"0"+date.getMinutes():date.getMinutes()).toString()
        str = str +":"+ ((date.getSeconds().toString().length == 1)?"0"+date.getSeconds():date.getSeconds()).toString()
        var ms:String = date.getMilliseconds().toString()
        while (ms.length < 3)
            ms = "0"+ms
        str = str+"."+ms
        var offsetMinute:Number = date.getTimezoneOffset()
        var direction:Number = (offsetMinute<0)?1:-1
        var offsetHour:Number = Math.floor(offsetMinute/60)
        offsetMinute = offsetMinute-(offsetHour*60)

        var offsetHourStr:String = offsetHour.toString()
        while (offsetHourStr.length < 2)
            offsetHourStr = "0"+offsetHourStr
        var offsetMinuteStr:String = offsetMinute.toString()
        while (offsetMinuteStr.length < 2)
            offsetMinuteStr = "0"+offsetMinuteStr
        str = str+((direction == -1)?"-":"+")+offsetHourStr+":"+offsetMinuteStr
        return str 
    } 

3
我本来希望不必重复造轮子。 - Sietse
也许可以看看大型框架/库(如as3coreLib、Spring Actionscript1)中提供的不同util类。我不确定你想做什么。你只需要格式化程序还是计算器?简单的谷歌搜索就能找到很多Actionscript 3日期计算的实用类。此外,将Java日期实用程序类转换为As3将是微不足道的。http://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/utils/DateUtil.as - Guillaume Malartre

1

1
值得注意的是,DateFormatter是Flex框架的一部分,如果您想使用它,您需要包含适当的Flex库。否则,在普通的Flash项目中无法使用。 - Marcel Ray

1

很遗憾,我认为在本地支持方面你没有忽略任何东西。有一个this project似乎提供了更多的灵活性,但是我从来没有深入研究过它,所以我不能保证它的可靠性。目前我正在处理的项目因此而产生了一个500行(并且还在增加)的DateUtil类。


0
private static function getTime():String
{
    const d = '.';
    const e = '';
    const s = ':';

    var date:Date = new Date();
    return e.concat(pad(date.hours, 2), s, 
                    pad(date.minutes, 2), s, 
                    pad(date.seconds, 2), d, 
                    pad(date.milliseconds, 3));

    function pad(value:String, length:int):String
    {
        const zero = '0';
        var result:String = value;
        while (result.length < length)
        {
            result = zero.concat(result);
        }
        return result;
    }
}

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