Coldfusion 中的.Net 时间字符串转换

.Net time string conversion in Coldfusion

我有一个来自 .NET 的六位数时间字符串,我想在 ColdFusion 中转换为时间戳。正确的转换方法是什么?

string= 20190126195631

日期很简单:

thisDate = '#mid(string,5,2)#/#mid(string,7,2)#/#mid(string,1,4)#'

获得我尝试过的时间:

timestamp = timeFormat(parseDateTime(mid(string,9,6)),'HH:mm')

如何使用 195631 来显示时间戳?

谢谢!你的评论帮助我意识到时间很简单:HHMMSS 19 = 7 p.m., 56 mins and 31 secs.

让我失望的是格林威治标准时间(对我来说是 -8 小时)班次。 所以答案是:

time = '#mid(string,9,2)-8#:#mid(string,11,2)#'

我在这里可能会发疯,但看起来字符串可以像这样拆分:

2019-01-26 19:56:31

因此,使用 Coldfusion:


<cfset datetimestring = "20190126195631">

<cfset year = Mid(datetimestring,1,4)>
<cfset month = Val(Mid(datetimestring,5,2))>
<cfset day = Val(Mid(datetimestring,7,2))>
<cfset hour = Val(Mid(datetimestring,9,2))>
<cfset minute = Val(Mid(datetimestring,11,2))>
<cfset second = Val(Mid(datetimestring,13,2))>


<cfset dateTime = CreateDateTime(year,month,day,hour,minute,second)>

<cfset dateTimeOffset = DateAdd("h", -8, dateTime)>

<cfoutput>
#dateTimeOffset#
</cfoutput>

我说过这个字符串可能只是一个纪元时间戳,但它看起来确实像一个 'date time' 模式?

(评论太长了...)

time = '#mid(string,9,2)-8#

不要只从小时中减去 8,因为当 UTC 值介于午夜和早上 7 点之间时,它会 return 无效值,例如“-1”AM 或“-8”AM。

此外,如果您要将值转换为本地时间,请不要忘记夏令时的变化。 8 小时的偏移量可能会更改为 7 小时,具体取决于一年中的时间和地区。不要使用硬编码数字,而是使用掩码查看 DateConvert function to convert UTC to local time and using ParseDateTime,而不是多个字符串函数。

请记住,根据您的 CF 版本,所有建议的方法都有利有弊 .. 遗憾的是有潜力 bugs/gotchas ..因此,请务必使用各种日期值和时区进行测试。

ColdFusion 2016+ 语法(注意,使用 "nn" 分钟。Runnable Example

str = "20190126175631";
utcDate = parseDateTime(str, "yyyyMMddHHnnss");
localDate = DateConvert("utc2Local", utcDate);

writeOutput("utcDate ="& utcDate &" localDate = "& localDate);

ColdFusion 10/11 语法(注意,使用 "mm" 分钟。Runnable Example

str = "20190126175631";
utcDate = parseDateTime(str, "yyyyMMddHHmmss");
localDate = DateConvert("utc2Local", utcDate);

writeOutput("utcDate ="& utcDate &" localDate = "& localDate);