正则表达式,用于解析ActionScript3中的时间戳字符串

时间:2016-08-26 01:02:26

标签: regex actionscript-3 flex

我正在使用ActionScript3开发一个项目。我有这个函数来解析时间戳字符串。

Plan_ID PlanBeginDate  PlanEndDate  Srv_Discipline_ID  SrvBeginDate  SrvEndDate
------- -------------  -----------  -----------------  ------------  ----------
   3     2013-01-01     2014-01-01          1           2013-01-01    2013-06-01
   4     2015-01-01     2016-01-01          3           2015-01-01    2015-07-01
   4     2015-01-01     2016-01-01          3           2015-08-01    2016-01-01

这似乎适用于除private function convertTimestampToNumber(timestamp:String):Number { //YYYY-MM-DD HH:mm:SS:sss var re:RegExp = /(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})\s(?P<hour>\d{2}):(?P<min>\d{2}):(?P<sec>\d{2})\.(?P<msec>\d{3})/; var result:Array = re.exec(timestamp); Alert.show(timestamp, "Timestamp string", Alert.OK); return (10000000000000 * parseInt(result.year) + 100000000000 * parseInt(result.month) + 1000000000 * parseInt(result.day) + 10000000 * parseInt(result.hour) + 100000 * parseInt(result.min) + 1000 * parseInt(result.sec) + parseInt(result.msec)); } 之外的所有时间戳。这会引发错误:

"2016-08-01 09:19:43.23"

我认为,因为这个时间戳的毫秒部分只有2个字符长,所以它会抛出错误。为了解决这个问题,我将正则表达式的毫秒部分更改为[Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference. ,认为现在它将2个字符和3个字符的长毫秒视为有效,但现在它会在(?P<msec>\d{2|3})上抛出相同的错误

什么是正确的正则表达式,可以将两种情况视为有效?

2 个答案:

答案 0 :(得分:2)

您的更改几乎正确。你能做的是:

(?P<msec>\d{1,3})

这将匹配任意数毫秒,从1位数(可能,但不太可能出现)到3。

答案 1 :(得分:0)

我不确定您的问题,但如果您使用de Date Class,您可以根据需要设置结果格式。

请在下面检查并调整DateTimeFormatter代码 并检查setDateTimePattern()方法:

import flash.utils.getTimer;
import flash.globalization.DateTimeFormatter;
import flash.globalization.DateTimeStyle;

var currentTime = new Date();
function formatDate(date:Date) {
    var dtf:DateTimeFormatter = new DateTimeFormatter("fr-FR");
    // or new DateTimeFormatter("en-EN");
    dtf.setDateTimePattern("yyyy-MM-dd hh:mm:ss");
    var longDate:String = dtf.format(date);
    trace(longDate)+getTimer();
    //trace("   *** LocaleID requested=" + dtf.requestedLocaleIDName);
    //trace("   *** Format requested (" + dtf.getDateTimePattern() + ")");
}
trace(" setDateTimePattern example");
formatDate(currentTime);
// output the current time formated as "yyyy-MM-dd hh:mm:ss"
// no Milliseconds avalaible now!

只需检查参考,您就会找到答案AMO。 希望这会有所帮助。