我有一个来自.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
显示时间戳记?
答案 0 :(得分:4)
(评论太久了...)
time ='#mid(string,9,2) -8#
不要仅从小时中减去8,因为当UTC值在午夜到7AM之间时,它将返回无效的值,例如“ -1” AM或“ -8” AM。
此外,如果要将值转换为本地时间,请不要忘记夏令时的更改。 8小时的偏移量可能会更改为7小时,具体取决于一年中的时间和时区。不用使用硬编码数字,而是使用DateConvert函数将UTC转换为本地时间,并使用ParseDateTime带掩码而不是多个字符串函数。
请记住,根据建议的CF版本,所有建议的方法都有优点,缺点和可悲的潜在错误/陷阱..。因此,请务必使用各种日期值和时区进行测试。
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);
答案 1 :(得分:2)
谢谢!您的评论使我意识到时间很简单:HHMMSS 19 =下午7点,56分31秒。
让我失望的是格林尼治标准时间(对我而言是-8个小时)轮班。 答案是:
email - : 65279
surveyLink - s : 115
name - n : 110
undefined
email - : 65279
surveyLink - s : 115
name - n : 110
undefined
email - : 65279
surveyLink - s : 115
name - n : 110
undefined
答案 2 :(得分: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>
是的,我说过这个字符串可能只是一个纪元时间戳,但它看起来确实像“日期时间”模式吗?