vb脚本中的日期问题

时间:2014-07-22 18:28:15

标签: vbscript asp-classic

我的问题是,当我找回日期时,它会以这种格式提供给我:

lastseenstatus=rsprefobj("lastseentstamp")

19-07-2014 15:31:32

我想要7/19/2014 3:31:32 PM格式,AM/PM完整无缺。

请帮助..

2 个答案:

答案 0 :(得分:3)

首先,您需要确定rsprefobj("lastseentstamp")的数据类型:

MsgBox TypeName(rsprefobj("lastseentstamp"))

如果是字符串,则需要先将其转换为日期时间值:

lastseenstatus = CDate(rsprefobj("lastseentstamp"))

如果您希望根据系统的区域设置格式化日期,请使用建议FormatDateTime()@John功能:

MsgBox FormatDateTime(lastseenstatus)

如果您需要一个不同的日期格式而不管系统的区域设置,您必须自己构建格式化的字符串:

Function LPad(v) : LPad = Right("00" & v, 2) : End Function

Function FormatDate(d)
  formattedDate = Month(d) & "/" & LPad(Day(d)) & "/" & Year(d) & " " & _
                  ((Hour(d) + 23) Mod 12 + 1) & ":" & LPad(Minute(d)) & ":" & _
                  LPad(Second(d))

  If Hour(d) < 12 Then
    formattedDate = formattedDate & " AM"
  Else
    formattedDate = formattedDate & " PM"
  End If

  FormatDate = formattedDate
End Function

MsgBox FormatDate(lastseenstatus)

或使用.Net StringBuilder类:

Set sb = CreateObject("System.Text.StringBuilder")
sb.AppendFormat "{0:M\/dd\/yyyy h:mm:ss tt}", lastseenstatus

MsgBox sb.ToString()

在我的测试中,我无法使tt格式说明符起作用,所以你可能不得不求助于这样的事情:

Set sb = CreateObject("System.Text.StringBuilder")

If Hour(lastseenstatus) < 12 Then
  am_pm = "AM"
Else
  am_pm = "PM"
End If

sb.AppendFormat_5 Nothing, "{0:M\/dd\/yyyy h:mm:ss} {1}", _
  Array(lastseenstatus, am_pm)

MsgBox sb.ToString()

答案 1 :(得分:0)

我假设您使用的是VBScript,而不是像标记的那样使用VB.NET。

使用FormatDateTime(lastseenstatus)

那应该给你格式&#34; 2/16/2010 1:45:00 PM&#34;。