2

我正在使用 ColdFusion 10 进行一些 REST 调用,并且返回的日期使用的是 GMT 偏移量。

例子:2013-03-25T14:30:40-04:00

我需要将此格式化用于两个目的:

  1. 屏幕显示,所以它看起来像mm/dd/yyyy hh:mm:ss
  2. 插入到 mySQL。

我尝试了各种 CF 时间/日期功能,但继续得到“不是有效的日期格式”

我想也许#ParseDateTime(i.submitted_at,"pop")#会用 POP 处理它,但同样的问题。

现在花了几个小时尝试多种变体并在谷歌上搜索现在只是绕圈子。任何想法将不胜感激。

谢谢!

4

5 回答 5

4

看看DateConvertISO8601()CFLib 上的 UDF。

CFLib 上的 DateConvertISO8601(ISO8601dateString, targetZoneOffset)

说明:
此函数采用一个包含 ISO 8601 日期的字符串并将其转换为 ODBC 日期时间,但可以调整为转换为您喜欢的任何内容。它还将通过指定偏移量转换为您选择的时区中的日期时间,即它可能需要 GMT 中的日期时间并转换为 PT。请参阅http://www.w3.org/TR/NOTE-datetime了解 ISO 8601 的描述,这是日期和时间表示的国际标准。

返回值:
返回日期时间。

源代码可在我提供的链接中查看。

于 2013-03-27T12:48:09.197 回答
3

这是一个信息性答案,而不是对该问题的直接答案。

ColdFusion 11 更新了ParseDateTime()函数,以便它将 ISO-8601 日期/时间字符串正确转换为 ColdFusion 日期时间对象。

于 2014-07-14T17:13:07.477 回答
3

这 2013-03-25T14:30:40-04:00 是一个字符串。如果你运行这个:

x = left(2013-03-25T14:30:40-04:00, 19);

你得到 2013-03-25T14:30:40。您可以使用替换功能将 T 替换为空格。然后你可以到这个

DateTimeVar =parsedatetime('2013-03-25 14:30:40');

现在您有了一个可以格式化的日期时间变量。如有必要,您可以使用与 GMT 的偏移量进行 datediff。

于 2013-03-27T12:42:07.077 回答
2

对于许多远程请求和响应,日期/时间值通常可以以 ISO 格式返回。在您的情况下,掩码如下所示:

YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)

在此 ISO 格式中,T 字符串是时间戳记在字符串中开始的标记的文字表示(直接跟在偏移量后面)。

下面是一个可重用的函数,它将 ISO 日期格式转换为可用的 ColdFusion 日期时间对象:

<cffunction name="ISOToDateTime" access="public" returntype="string" output="false" 
    hint="Converts an ISO 8601 date/time stamp with optional dashes to a ColdFusion   
        date/time stamp.">
    <cfargument name="Date" type="string" required="true" hint="ISO 8601 date/time stamp." />
        <cfreturn ARGUMENTS.Date.ReplaceFirst(
            "^.*?(\d{4})-?(\d{2})-?(\d{2})T([\d:]+).*$",
            "$1-$2-$3 $4"
            ) />
</cffunction>

然后,您可以像这样调用该函数来输出或返回对 ColdFusion 友好的日期时间版本:

ISOToDateTime( "2013-03-25T14:30:40-04:00" )

该功能由 Ben Nadel 提供。原始博客文章可以在这里找到:

http://www.bennadel.com/blog/811-Converting-ISO-Date-Time-To-ColdFusion-Date-Time.htm

如果需要,您还可以使用偏移量转换日期时间值。Ben Nadel 再次发表了一篇很棒的博文,概述了如何实现这一目标:

http://www.bennadel.com/blog/1595-Converting-To-GMT-And-From-GMT-In-ColdFusion-For-Use-With-HTTP-Time-Stamps.htm

于 2013-03-27T12:52:29.293 回答
1

CF10 可以使用parseDateTime() 文档示例中所述的此代码。

<cfset string = "1997-07-16T19:20:30+01:00">
<cfset date = parseDateTime(string, "yyyy-MM-dd'T'HH:mm:ssX")>
于 2016-03-23T16:26:24.453 回答