GWR*_*GWR 6 vbscript timezone datetime utc asp-classic
我有以下功能,可以很好地将当前时间转换为UTC时间.
Function toUtc(byVal dDate)
Dim oShell : Set oShell = CreateObject("WScript.Shell")
toUtc = dateadd("n", oShell.RegRead("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias"), cDate(dDate))
End Function
Run Code Online (Sandbox Code Playgroud)
但是,我认为这不能充分处理将来或历史日期转换为UTC,因为该函数需要知道转换日期时服务器时区的偏移量,以及它是否是在夏令时期间与否.
我怎么能绕过这个?
我在IIS7.5的Windows服务器上使用vbScript/Classic ASP
为了澄清,这与格式化日期无关.它是关于从服务器时区转换为UTC历史日期的全部内容.在夏令时期间,如果我尝试转换标准时间内发生的日期时间,则偏移量将减少60分钟.
例如:
让我们说今天,2013-02-19(非夏令时),我想从2008年6月5日(在夏令时期间)将时间戳从PDT(我的服务器时区)转换为UTC.使用我函数中的方法将给出一个与正确值相差60分钟的值(因为CURRENT时间是PST(不是PDT),该历史日期的偏移量将不正确).
换句话说,输入日期的时区偏移可以是UTC-7或UTC-8,具体取决于是否在该特定日期观察到DST.我需要为输入日期计算正确的UTC日期,无论是否在当前日期观察到DST,我都需要使用该代码.
这是我根据 @AardVark71 的建议最终实现的解决方案。
我把它放在我的 func.asp 文件中:
<script language="javascript" runat="server">
function toUtcString(d) {
var dDate = new Date(d);
return Math.round(dDate.getTime() / 1000);
};
</script>
Run Code Online (Sandbox Code Playgroud)
它输出一个时间戳值。然后,我可以从经典 asp 代码中的任何位置执行以下操作:
response.Write DateAdd("s", toUtcString(cDate("11/11/2012 06:25 PM")), "01/01/1970 00:00:00") 'expect 11/11/2012 10:25:00 PM gmt/utc time
response.Write DateAdd("s", toUtcString(cDate("06/11/2012 06:25 PM")), "01/01/1970 00:00:00") 'expect 6/11/2012 9:25:00 PM gmt/utc time
Run Code Online (Sandbox Code Playgroud)
这(我相信)很简单,它会产生预期值并充分考虑 DST。
| 归档时间: |
|
| 查看次数: |
12771 次 |
| 最近记录: |