【发布时间】:2013-05-07 16:03:29
【问题描述】:
我想在我的vbscript 中获取完整格式的日期。比如我把DateParam = FormatDateTime(Date()-1, 2)
但它会返回
3/8/2012
我需要返回03/08/2012。
有谁知道如何解决这个问题?
【问题讨论】:
我想在我的vbscript 中获取完整格式的日期。比如我把DateParam = FormatDateTime(Date()-1, 2)
但它会返回
3/8/2012
我需要返回03/08/2012。
有谁知道如何解决这个问题?
【问题讨论】:
FormatDateTime 函数没用,因为它取决于用户特定和全局区域设置。
最好的(以最少的努力获得最大的收益)解决方案——利用 .NET——在日期方面存在缺陷;再次因为对区域设置的依赖。
如果您想要/需要推出自己的函数,请从 fmtDate() 之类的函数开始。
Dim g_oSB : Set g_oSB = CreateObject("System.Text.StringBuilder")
Function sprintf(sFmt, aData)
g_oSB.AppendFormat_4 sFmt, (aData)
sprintf = g_oSB.ToString()
g_oSB.Length = 0
End Function
Function fmtDate(dtX)
fmtDate = Join(Array( _
Right(100 + Month(dtX), 2) _
, Right(100 + Day(dtX), 2) _
, Year(dtX) _
), "/")
End Function
Dim dtYesterday : dtYesterday = Date() - 1
WScript.Echo "Yesterday:", dtYesterday, GetLocale()
WScript.Echo "sprintf (silly) =>", sprintf("{0:MM/dd/yyyy}", Array(dtYesterday))
WScript.Echo "sprintf (clumsy) =>", sprintf("{0:MM}/{0:dd}/{0:yyyy}", Array(dtYesterday))
WScript.Echo "fmtDate =>", fmtDate(dtYesterday)
输出:
Yesterday: 08.03.2012 1033
sprintf (silly) => 03.08.2012
sprintf (clumsy) => 03/08/2012
fmtDate => 03/08/2012
转念一想:
转义“/”有助于使 sprintf() 可用:
WScript.Echo "sprintf (silly me) =>", sprintf("{0:MM\/dd\/yyyy}", Array(dtYesterday))
输出:
sprintf (silly me) => 03/08/2012
所以不要打扰 fmt* 函数,而是使用 .NET 格式。
【讨论】:
ThisDate = Date()
MyDate = Right("0" & CStr(Month(ThisDate)), 2) & "/" & _
Right("0" & CStr(Day(ThisDate)), 2) & "/" & CStr(Year(ThisDate))
【讨论】: