如何在VB中重新格式化存储为字符串的日期?

时间:2012-10-26 14:38:18

标签: vbscript

我有一个日期(11/1/2012)存储为名为" sTemp"的字符串变量。我想以yyyyMMdd格式将此日期分配给字符串变量LessOfFiveDates。我一直在尝试以下代码的变体,但它无效。

如何重新格式化以便创建所需的输出?

If IsDate(sTemp) Then
    dtTemp = CDate(sTemp)
    LessOfFiveDates = CStr(Format(dtTemp, "yyyyMMdd"))
Else

3 个答案:

答案 0 :(得分:3)

您提供了自己的解决方案,为此提供了支持!

在你的另一个问题中,你要求一个优雅的解决方案。这个问题的优雅解决方案是使用dotnet StringBuilder对象。使用此对象,您可以更灵活地处理格式。因为它是以字符串而不是代码实现的,所以您可以在配置设置中添加格式而不会有任何麻烦 接下来,stringbuilder将根据您的系统区域设置使用日期,如果您的脚本在具有不同设置的系统上运行以显示日期和时间,那么这很好。

Dim sb : Set sb = createobject("System.Text.StringBuilder")
Dim d : d = "5/6/2007"

If isDate(d) Then
    call sb.AppendFormat("{0:yyyyMMdd}", cdate(d))
    LessOfFiveDates = sb.ToString()
End If

答案 1 :(得分:1)

我使用此代码开始工作:

If IsDate(sTemp) Then
    LessOfFiveDates = CStr(Year(sTemp) & Right("00" & Month(sTemp), 2) & Right("00" & Day(sTemp), 2))
Else

答案 2 :(得分:0)

如果有一个Visual Studio 6.0的开发者许可证(或VB6等子产品),有一种简单的方法可以在VBScript中获得Format()函数,而不会产生.Net的极端开销:

'Requires msstdfmt.dll, part of Visual Studio 6.0 and
'not meant for general redistribution.
Option Explicit

Class Formatter
    Private SDFMT, RS

    Private Sub Class_Initialize()
        Set SDFMT = CreateObject("MSSTDFMT.StdDataFormat")
        Set RS = CreateObject("ADODB.Recordset")
        With RS
            .Fields.Append "V", 12 'adVariant.
            .Open
            .AddNew
            Set .Fields(0).DataFormat = SDFMT
        End With
    End Sub

    Private Sub Class_Terminate()
        RS.Close
    End Sub

    Public Function Format(ByVal Value, ByVal Style)
        SDFMT.Format = Style
        With RS.Fields(0)
            .Value = Value
            Format = .Value
        End With
    End Function
End Class

Dim FMT

Set FMT = New Formatter

MsgBox FMT.Format(Now(), "yyyy-mmm-dd hh:nn:ss")
MsgBox FMT.Format(123456.789, "###,##0.00")

但是您通常不需要如此完整的通用性,并且您可以使用现有的VBScript操作来获得所需的结果:

Option Explicit

Private Function ZF2(ByVal Num)
    ZF2 = Right("0" & CStr(Num), 2)
End Function

Private Function DtFormat(ByVal Dt)
    DtFormat = CStr(Year(Dt)) & ZF2(Month(Dt)) & ZF2(Day(Dt))
End Function

MsgBox DtFormat(#3/11/2012#)

当然,这些都不涉及在尝试将String值用作Date值时遇到的危险。除非您在Strings中小心使用通用日期格式(即美国布局:MM / DD / YYYY)并依赖隐式转换,否则这些都会出错。 CDate()函数是区域设置感知的,如果使用通用格式的日期,可能会产生伪造的结果。