从字符串中删除时区或格式化coldfusion中的HTTP TIME STRING

时间:2015-03-31 09:33:57

标签: string time coldfusion coldfusion-9 coldfusion-10

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

<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 23:00:00

但在一个案例中,我遇到了一个时间字符串,其中还包含一个如下所示的时区:11:00 PM EDT,所以当我尝试使用timeFormat格式化此字符串时,我收到的错误是正确。

  

晚上11:00 EDT是无效的日期或时间字符串

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

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

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

是否还有其他函数来格式化这样的字符串。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:3)

如果内置格式化函数不起作用,您可以深入查看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'}

答案 1 :(得分:1)

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

<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#">

希望这有帮助。