【问题标题】:Date issue in vb script [duplicate]vb脚本中的日期问题[重复]
【发布时间】:2014-07-30 17:08:30
【问题描述】:

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

lastseenstatus=rsprefobj("lastseentstamp")

19-07-2014 15:31:32

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

请帮忙..

【问题讨论】:

  • 这不过是显示或格式问题。 SQL Server 2008 R2 具有CAST and CONVERT,它提供各种格式选项,SQL Server 2012 及更高版本具有FORMAT 函数,可以根据您的喜好进行格式化

标签: vbscript asp-classic


【解决方案1】:

首先你需要确定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()

【讨论】:

  • 谢谢@Ansgar Wiechers 。它就像魅力一样.. :)
【解决方案2】:

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

使用FormatDateTime(lastseenstatus)

这应该为您提供“2/16/2010 1:45:00 PM”格式。

【讨论】:

  • FormatDateTime() 将根据系统的区域设置格式化给定的日期,这可能是也可能不是所需的格式。
猜你喜欢
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2011-03-12
  • 2013-07-23
  • 2012-01-13
相关资源
最近更新 更多