如何在VBScript中使用最少分隔符和时区格式化日期时间?

4
我有以下C#代码:

DateTime dt = GetDateTime();
string formatted = dt.ToString("yyyyMMddTHHmmsszz");

它返回以下格式的日期:

20100806T112917+01

我希望能够在VBScript中获得与此相同的结果(用于旧版ASP应用程序)。特别重要的是,我需要获取UTC偏移信息,或将时间转换为UTC。

我该如何做到这一点?

2个回答

8

对于日期格式化,我喜欢使用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。

+1 那绝对算得上更好的解决方案!我不知道你可以从 VBScript 实例化 .NET 对象。 - Damian Powell
@DamianPowell 只有一些 COM 公开的类可以在注册表 HKEY_CLASSES\System. 键中找到 *(例如 System.Text.StringBuilder)*,只需浏览列表即可查看公开了什么。 - user692942

2
这是我的尝试。欢迎提供更好的解决方案!
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接