VB脚本日期格式 "YYYYMMDDHHMMSS"

4

正如标题所述,我需要将now()函数格式化为“YYYYMMDDHHMMSS”格式显示。

我尝试过拆分它,但这样会丢失我需要保留的前导零。

例如,我的日期时间是“27/02/2015 13:02:27”。

mydt = now() 

MSGBOX Year(mydt)& Month(mydt)& Day(mydt)& Hour(mydt)& Minute(mydt)& second(mydt)

这将返回“201522713227”。

我需要它返回“20150227130227”,我可以使用 if < 10,但肯定有更好的方法。


@Ekkehard.Horner - 你可能能帮忙吗? - Mike Harris
看看这个链接是否有帮助:http://stackoverflow.com/a/9641534/603855 - Ekkehard.Horner
5个回答

9

感谢 @Ekkehard.Horner 和 @Bagger 的建议。

我已经审查了您的建议,并选择了适合我的下面内容进行修改。

我之所以选择这个,是因为它更加易用/适应性强,我可以根据需要随意更改日期格式。

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

'-------------------------------------------------------------------

Dim dt : dt = now()

WScript.Echo sprintf("{0:yyyyMMddhhmmss}", Array(dt))

这将以所需格式yyyyMMddhhmmss返回值。
20150302110727

如果你只需要日期,那么你只需更改sprintf。
sprintf("{0:yyyyMMdd}", Array(dt))

只需要时间

sprintf("{0:hhmmss}", Array(dt))

and so on.....


虽然我选择了这种方法作为首选,但请注意,对 System.Text.StringBuilder 库的引用取决于 .NET Framework 3.5。 - Adam Cox
目前,这个程序生成的是12小时制的下午时间格式(例如,下午5点为05)。 - Sum None

5

这是一篇旧帖子,但我正在寻找并偶然发现了它。最终采用了以下示例,可以作为一行代码来使用...

wscript.echo DateString(now())

Function DateString(dDate)
    DateString = Year(dDate)& right("0" & Month(dDate),2) & right("0" & Day(dDate),2) & right("0" & Hour(dDate),2) & right("0" & Minute(dDate),2) & right("0" & second(dDate),2)
End Function

这种解决方案的不便之处在于它只能以一种方式返回日期格式化。例如,如果需要从另一个函数中以不同的方式进行格式化,假设在某个地方您需要以下日期格式:yyyyMMddhhmmss,在其他地方您需要这样的格式:yyyy-MM-dd hh.mm.ss,在其他地方您只需要yyyy-MM-dd,在其他地方您只需要HH:mm:ss。基本上,根据您的方法,您需要为每种格式编写不同的函数,因为它没有任何灵活性。 - willy wonka

1

这是我用来使其更加美观的完整方法,适用于解析SQL数据。

function getDateFormatedWithDash(DateVal)
    rtnDateStr = year(DateVal)
    m=month(DateVal)
    d=day(DateVal)
    h=Hour(DateVal)
    Min=Minute(DateVal)
    sec=second(DateVal)

    if month(DateVal)<10 then
        m="0"&month(DateVal)
    end if

    if day(DateVal)<10 then
        d="0"&day(DateVal)
    end if

    if Hour(DateVal)<10 then
        h="0"&Hour(DateVal)
    end if  

    if Minute(DateVal)<10 then
        Min="0"&Minute(DateVal)
    end if  

    if second(DateVal)<10 then
        sec="0"&second(DateVal)
    end if


    rtnDateStr = rtnDateStr&"-"&m&"-"&d&" "&h&":"&Min&":"&sec
    getDateFormatedWithDash=rtnDateStr
end function

0

这个可以用,你也可以使用正则表达式

mydt = now() 
wscript.echo (Month(mydt))
mm = add0( Month(mydt))
dd = add0( Day(mydt))
hh = add0( Hour(mydt))
mn = add0( Minute(mydt))
ss = add0( second(mydt))

MSGBOX Year(mydt)& mm & dd & hh & mn & ss

Function add0 (testIn)
 Select Case Len(testIn) < 2
   CASE TRUE
     add0 = "0" & testIn
   Case Else
     add0 = testIn
  End Select      
End Function    

0

这里是一个正则表达式的例子

  mydt = now()
Set regEx = New RegExp
  With regEx
  .Pattern = "\b\d\b"
  .IgnoreCase = True
  .Global = True
 End With

wscript.echo  Year(mydt)& _
  regEx.Replace(Month(mydt),"0" Month(mydt)) & _
  regEx.Replace(Day(mydt),"0" & Day(mydt)) &_
  regEx.Replace(Hour(mydt),"0" & Hour(mydt)) &_
  regEx.Replace(Minute(mydt),"0" & Minute(mydt)) & _ 
  regEx.Replace(second(mydt),"0" & second(mydt))

Set RegularExpressionObject = nothing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接