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