我有一个日期(11/1/2012)存储为一个名为“sTemp”的字符串变量。我想将此日期分配给格式为 yyyyMMdd 的字符串变量 LessOfFiveDates。我一直在尝试以下代码的变体,但它不起作用。
我如何重新格式化它以创建所需的输出?
If IsDate(sTemp) Then
dtTemp = CDate(sTemp)
LessOfFiveDates = CStr(Format(dtTemp, "yyyyMMdd"))
Else
我有一个日期(11/1/2012)存储为一个名为“sTemp”的字符串变量。我想将此日期分配给格式为 yyyyMMdd 的字符串变量 LessOfFiveDates。我一直在尝试以下代码的变体,但它不起作用。
我如何重新格式化它以创建所需的输出?
If IsDate(sTemp) Then
dtTemp = CDate(sTemp)
LessOfFiveDates = CStr(Format(dtTemp, "yyyyMMdd"))
Else
您提供了自己的解决方案,对此表示赞同!
在您的另一个问题中,您要求提供一个优雅的解决方案。这个问题的一个优雅的解决方案是使用 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
我使用以下代码让它工作:
If IsDate(sTemp) Then
LessOfFiveDates = CStr(Year(sTemp) & Right("00" & Month(sTemp), 2) & Right("00" & Day(sTemp), 2))
Else
如果一个人拥有 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() 函数可识别区域设置,但如果输入通用格式的日期,则可能会产生虚假结果。