从字符串中删除时区或在coldfusion中格式化HTTP time string



我正在使用timeFormat()格式化包含11:00 PM23:00:00的普通字符串,如下所示:

<cfset local.timeString = "11:00 PM">
<cfdump var="#local.timeString#">
<cfset local.newTimeString = timeFormat(local.timeString, "HH:mm:ss")>
<cfdump var="#local.newTimeString#">

输出:

11:00 PM 23:00:00

但在一个例子中,我遇到了一个时间字符串,它也包含这样的时区:11:00 PM EDT,所以当我试图使用timeFormat格式化这个字符串时,我得到了一个正确的错误。

美国东部时间下午11:00是无效的日期或时间字符串

这种类型的字符串可以使用GetHttpTimeString生成。

我需要用这样的东西吗?这不是一个正确的方式。只是认为没有其他解决方案。

<cfset local.newTimeString = left(local.timeString
                                , len(local.timeString) - len(listLast(local.timeString," "))
                                )>

还有其他函数可以像这样格式化字符串吗。

请帮忙。提前谢谢。

如果内置的格式化函数不起作用,可以使用java并使用SimpleDateFormat类。

// "hh" - 12 hour clock, "HH" - 24 hour clock
sdf = CreateObject("java","java.text.SimpleDateFormat").init("hh:mm aa zzz");
testdate = "11:00 PM EDT";
writeDump(sdf.parse(testdate));  // returns {ts '1970-01-01 22:00:00'}

尝试使用正则表达式替换时间字符串中的时区。这不是正确的方式。但你可以通过这种方法找到解决方案。

<cfset local.timeString = "11:00 PM EDT">
<cfset local.newTimeStringArray  = REMatch("((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:s?(?:am|AM|pm|PM)))",local.timeString) />
<cfdump var="#local.newTimeStringArray[1]#">
<cfset local.newTimeString = timeFormat(local.newTimeStringArray[1], "HH:mm:ss")>
<cfdump var="#local.newTimeString#">

希望这能有所帮助。

最新更新