0

我们有一个将信息记录到数据库中的应用程序,如果出现错误,我们会将其记录在日志文件中。我们的用户遍布全球。如果确实发生了某些事情,我们想记录问题的时间戳,但我们需要统一时间戳,这意味着香港与加利福尼亚的某人应该具有相同的时间戳和适当的时区偏移。我不知道如何在 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

4

1 回答 1

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")>
于 2013-07-26T14:24:59.693 回答