VBS中的日期格式

时间:2012-03-09 21:07:02

标签: vbscript

我希望在我的中获得完整格式的日期。例如,我把
DateParam = FormatDateTime(Date()-1, 2)

但它返回

3/8/2012
我需要恢复功能 而是03/08/2012

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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格式化。

答案 1 :(得分:-2)

ThisDate = Date()

MyDate = Right("0" & CStr(Month(ThisDate)), 2) & "/" & _
         Right("0" & CStr(Day(ThisDate)), 2) & "/" & CStr(Year(ThisDate))