0

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

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

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

3 回答 3

3

您提供了自己的解决方案,对此表示赞同!

在您的另一个问题中,您要求提供一个优雅的解决方案。这个问题的一个优雅的解决方案是使用 dotnet 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
于 2012-10-29T15:54:56.763 回答
1

我使用以下代码让它工作:

If IsDate(sTemp) Then
    LessOfFiveDates = CStr(Year(sTemp) & Right("00" & Month(sTemp), 2) & Right("00" & Day(sTemp), 2))
Else
于 2012-10-26T16:09:35.857 回答
0

如果一个人拥有 Visual Studio 6.0(或 VB6 等子产品)的开发人员许可证,则有一种简单的方法可以Format()在 VBScript 中获取函数,而无需 .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#)

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

于 2012-10-30T13:23:37.703 回答