代码之家  ›  专栏  ›  技术社区  ›  Damian Powell

如何在VBScript中用最少的分隔符和时区格式化datetime?

  •  4
  • Damian Powell  · 技术社区  · 14 年前

    我在C#中有以下代码:

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

    以以下格式返回日期:

    20100806T112917+01
    

    我该怎么做?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Cheran Shunmugavel    14 年前

    对于日期格式,我喜欢使用VBScript中的.NET StringBuilder类:

    Option Explicit
    
    Dim sb : Set sb = CreateObject("System.Text.StringBuilder")
    sb.AppendFormat "{0:yyyyMMddTHHmmsszz}", Now()
    Response.Write sb.ToString()
    

    以上返回:

    20100806T201139-07
    

        2
  •  2
  •   Damian Powell    14 年前

    这是我自己的尝试。更好的解决方案将被欣然接受!

    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