Flex中的时间解析

时间:2020-03-05 18:59:21  来源:igfitidea点击:

是否可以使用标准库将HH:MM格式的字符串解析为Date(或者其他)对象?

我知道我可以使用以下方法将类似" 9/17/2008 10:30"的内容解析为Date对象

var date:Date = new Date(Date.parse("9/17/2008 10:30");

但我只想单独解析10:30。以下代码不起作用。

var date:Date = new Date(Date.parse("10:30");

我知道我可以使用自定义RegEx轻松完成此操作,但似乎可以使用现有的Flex API做到这一点。

解决方案

回答

我们是否考虑过在时间字符串前面加上" 01/01/2000",然后应用日期?

另外,可能还有一个分词器,它将输入并在处将其分割:给我们一个可以转换为整数的字符串数组。令牌生成器也不难编写,而且如果flex中不存在令牌生成器,可能会很有趣。

-亚当

回答

如果必须使用指定的确切格式,则需要自己解析。

这是一个简单的示例(未经测试):

var str:String = "9/17/2008 10:30"

var items:Array = str.split(" ");
var dateElements:Array = items[0].split("/");
var timeElements:Array = items[1].split(":");

var n:Date = new Date(dateElements[2],
                        dateElements[0],
                        dateElements[1].
                        timeElements[0],
                        timeElements[1]);

如果未在24个时钟中表示时间,则无法检查AM或者PM(代码将采用AM)。

回答

要回答特定问题:不,没有库函数可以执行我们想做的事,但是没有库函数可以解析ISO格式,德语格式,瑞典格式,日期所在的日期罗马数字等

为什么不使用正则表达式?那就是他们的目的。

回答

作为一种简单而免费的解决方案,我们可以使用DateField的一些静态方法:

  • DateField.stringToDate(valueString:String,inputFormat:String):Date
  • DateField.dateToString(value:Date,outputFattern:String):String

但不幸的是,它们不支持小时/分钟/秒(仅日期)。

在特定情况下:Date对象始终还包含一个"日期"信息。如果不重要,我们是否不能在解析之前简单地连接一个标准日期字符串?