我有一个日期(11/1/2012)存储为名为" sTemp"的字符串变量。我想以yyyyMMdd格式将此日期分配给字符串变量LessOfFiveDates。我一直在尝试以下代码的变体,但它无效。
如何重新格式化以便创建所需的输出?
If IsDate(sTemp) Then
dtTemp = CDate(sTemp)
LessOfFiveDates = CStr(Format(dtTemp, "yyyyMMdd"))
Else
答案 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()函数是区域设置感知的,如果使用通用格式的日期,可能会产生伪造的结果。