Datetime Coldfusion日志文件和时区/区域设置

Datetime Coldfusion日志文件和时区/区域设置,datetime,coldfusion,coldfusion-9,Datetime,Coldfusion,Coldfusion 9,我们有一个将信息记录到数据库中的应用程序,如果存在erorr,则将其记录在日志文件中。我们的用户遍布全球。如果有什么事情发生,我们想记录这个问题的时间戳,但是我们需要时间戳是统一的,这意味着香港和加利福尼亚的人应该有相同的时间戳,有适当的时区偏移。我不知道如何在CF中这样做 处理约会一直是我一周的技能,如果能帮我解决这个问题,我将不胜感激 下面是写出日志文件的代码 <cftry> ... insert into db here ... <cfcatch type="an

我们有一个将信息记录到数据库中的应用程序,如果存在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>

... 在这里插入数据库。。。

但这句话可能是这个问题真正需要的全部:

<cfset error_msg = '#createodbcdatetime(now())#|#cfcatch.Message#|#cfcatch.Detail#|#cgi.HTTP_REFERER#|#cgi.SER

我很好奇,你在用ColdFusion 9吗?因为您可能希望在Application.cfc中实现OnError函数。它可能比这种不断尝试的方法更方便

也就是说,下面的函数将返回格式化的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>

var serverTime=now();
var utcTime=GetTimeZoneInfo();
var utcStruct=structNew();
utcStruct.Hour=日期部分(“h”,服务器时间);
utcStruct.Minute=日期部分(“n”,服务器时间);
utcStruct.Hour=utcStruct.Hour+utcTime.utcHourOffSet;
utcStruct.Minute=utcStruct.Minute+utcTime.utcMinuteOffSet;
如果(utcStruct.Minute LT 10)utcStruct.Minute=“0”&utcStruct.Minute;
更新:

正如在评论中提到的,上面的代码是不必要的,而且有缺陷。最好使用内置功能(至少MX7提供):



该应用程序是一个较旧的应用程序,没有使用应用程序进行设置。cfcAh,你完全正确!我能够在我们正在运行的CF版本中使用它。谢谢如果您使用的是Application.cfm,则有一个OneError模板可用。对于简单的代码片段,您应该在发布之前(如果可能)始终对其进行测试。如果你不能,至少要提到它没有经过测试,这样提问者就不会在出现问题时浪费太多时间:)既然答案已经存档,你介意用正确的代码更新你的回答吗?谢谢,谢谢。我只是稍微修改了一下,以显示答案的进展并保留上下文。希望你不介意:)
<cfset timeString = timeFormat( dateConvert("local2utc", now()), "HH:mm")>