我在 C# 中有以下代码:
DateTime dt = GetDateTime();
string formatted = dt.ToString("yyyyMMddTHHmmsszz");
它返回以下格式的日期:
20100806T112917+01
我希望能够在 VBScript 中获得相同的结果(对于旧版 ASP 应用程序)。获取 UTC 偏移信息或将时间转换为 UTC 尤其重要。
我怎么做?
我在 C# 中有以下代码:
DateTime dt = GetDateTime();
string formatted = dt.ToString("yyyyMMddTHHmmsszz");
它返回以下格式的日期:
20100806T112917+01
我希望能够在 VBScript 中获得相同的结果(对于旧版 ASP 应用程序)。获取 UTC 偏移信息或将时间转换为 UTC 尤其重要。
我怎么做?
对于日期格式,我喜欢使用 VBScript 中的 .NET StringBuilder 类:
Option Explicit
Dim sb : Set sb = CreateObject("System.Text.StringBuilder")
sb.AppendFormat "{0:yyyyMMddTHHmmsszz}", Now()
Response.Write sb.ToString()
以上返回:
20100806T201139-07
这假定您在 Web 服务器上安装了 .NET。
这是我自己的尝试。更好的解决方案将被亲切地接受!
Function ToDateTimeStringMinimalSeparators(dateTime)
' --------------------------------------------------------------------------
' F O R M A T T H E U T C O F F S E T
' --------------------------------------------------------------------------
Dim oShell, activeTimeBias
Set oShell = CreateObject("WScript.Shell")
activeTimeBias = oShell.RegRead("HKEY_LOCAL_MACHINE\System\" & _
"CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias")
Dim sign
sign = "-"
If activeTimeBias < 0 Then
sign = "+"
' Make it positive while we're doing calculations
activeTimeBias = activeTimeBias * -1
End If
Dim atbHours, atbMins
atbHours = Right("00" & Int(activeTimeBias / 60), 2)
atbMins = Right("00" & (activeTimeBias Mod 60), 2)
If atbMins = "00" Then
atbMins = ""
End If
Dim utcOffset
utcOffset = sign & atbHours & atbMins
' --------------------------------------------------------------------------
' F O R M A T T H E M A I N D A T E
' --------------------------------------------------------------------------
Dim dateBody
dateBody = Right("0000" & Year(dateTime), 4) & _
Right("00" & Month(dateTime), 2) & _
Right("00" & Day(dateTime), 2) & _
"T" & _
Right("00" & Hour(dateTime), 2) & _
Right("00" & Minute(dateTime), 2) & _
Right("00" & Second(dateTime), 2)
ToDateTimeStringMinimalSeparators = dateBody & utcOffset
End Function