我们有一个应用程序将信息记录到数据库中,如果有erorr,我们将其记录在日志文件中。我们的用户遍布全球。如果确实发生了某些事情,我们想记录问题的时间戳,但我们需要时间戳统一,这意味着香港与加利福尼亚州的某个人应该拥有相同的时区偏移相同的时间戳。我不知道如何在CF中这样做。
处理日期一直是我的一周技能,并会感谢一些帮助搞清楚这一点。
这是写出日志文件的代码
<cftry>
... insert into db here ...
<cfcatch type="any">
<cfset error_msg = '#createodbcdatetime(now())#|#cfcatch.Message#|#cfcatch.Detail#|#cgi.HTTP_REFERER#|#cgi.SERVER_NAME#|#cgi.SCRIPT_NAME#|#cgi.QUERY_STRING#'>
<cftry>
<cfif FileExists(ExpandPath(#log_name#))>
<cflock name="WebSiteErrorLog_Lock" type="exclusive" timeout="30">
<cffile action="append" addnewline="yes" file="#currentDirectory##log_name#" mode="777" output="#error_msg#">
</cflock>
<cfelse>
<cflock name="WebSiteErrorLog_Lock" type="exclusive" timeout="30">
<cffile action="write" addnewline="yes" file="#currentDirectory##log_name#" mode="777" output="#error_msg#">
</cflock>
</cfif>
<cfcatch type="any"></cfcatch>
</cftry>
</cfcatch>
但这条线可能是这个SO问题真正需要的所有内容:
<cfset error_msg = '#createodbcdatetime(now())#|#cfcatch.Message#|#cfcatch.Detail#|#cgi.HTTP_REFERER#|#cgi.SER
TIA
答案 0 :(得分:0)
我很好奇,您使用的是ColdFusion 9吗?因为您可能希望在Application.cfc中实现OnError函数。它可能比这种常量的Try-Catch方法更方便。
话虽如此,以下函数将返回格式化的UTC时间。我想我之前在这个网站上的其他人的回答中偷了它。
<cffunction name="getUTCTime" access="public">
<cfscript>
var serverTime=now();
var utcTime=GetTimeZoneInfo();
var utcStruct=structNew();
utcStruct.Hour=DatePart("h", serverTime);
utcStruct.Minute=DatePart("n", serverTime);
utcStruct.Hour=utcStruct.Hour + utcTime.utcHourOffSet;
utcStruct.Minute=utcStruct.Minute + utcTime.utcMinuteOffSet;
if (utcStruct.Minute LT 10) utcStruct.Minute = "0" & utcStruct.Minute;
</cfscript>
<cfreturn utcStruct.Hour & ":" & utcStruct.Minute>
</cffunction>
<强>更新强>
正如评论中所提到的,上面的代码是不必要的和错误的。最好使用内置的dateConvert()函数(至少从MX7开始提供):
<cfset timeString = timeFormat( dateConvert("local2utc", now()), "HH:mm")>