【发布时间】:2014-10-22 18:18:10
【问题描述】:
对于以下代码,我收到此错误:“从字符串“10/22.2014 12:00:00 A10”到类型“日期”的转换无效。”注意 - 与下面的代码相比 - 错误消息将 AM 转换为 A10。
我想要做什么
我试图让用户能够查询数据库以查找今天发生的交易。为此,我需要指定事务的时间戳,即MM/dd/yyyy timestamp。我已经咨询了MSDN documentation;但是,我无法让我的代码正常运行。
默认情况下,Date 对象似乎放弃了它们的时间戳(这可能是我正在使用的代码的结果,例如强制转换);因此,当指定“今天”的日期范围 (Today's Data - Today's Date) 时,我只剩下对象的默认行为:Today's Date 12:00:00 AM - Today's Date 12:00:00 AM。不管为什么会这样,这就是我剩下的问题。
目标:MM/dd/yyyy 12:00:00 AM - MM/dd/yy 11:59:59 PM(当天相同)。
我的目标是为Date 对象强制使用特定的时间戳(注意这不是DateTime 对象)。通过指定时间范围,我可以从数据库中获取今天的所有数据。
我有什么
下面是代码,下面是描述(我试图尽可能地压缩代码)。您还会注意到这只是代码的一半,即FromDate 部分(大概可以为ToDate 复制格式:
Public Shared Function ToFromDate(ByVal aValue As Object) As Date
Dim Result As Date
Try
Result = CDate(aValue)
Catch ex As Exception
Result = Now
End Try
Result = CDate(String.Format("{0:MM/dd/yyyy 12:00:00 AM}", Result))
Return Result
End Function
上面的代码将DateTime作为参数,例如10\10\2010 12:15:63 PM(并且,就我的问题而言,包括时间戳)。同样,我试图将Date 与时间戳一起使用并更改时间。 Result 接收 aValue,将对象转换为 Date 以“确保”它是一个日期。
在Result 收到一个值后(就像声明Date 时,它被初始化为#12:00:00 AM#,有趣的是),我尝试CDate() 一个格式化的String 对象。我还尝试删除第二个演员表,但仍然收到相同的错误(Result = CDate(String...) 行抛出错误)。
问题
主要问题:我如何适当地将日期转换为包含指定时间?
第二个微不足道的问题:# 周围的 Date 是什么?这是 SQL 的“东西”吗?
到目前为止,这是我解决上述问题的方法:
Dim Result As Date
Dim DateString As String = CStr(aValue)
Dim TestDateString As String = DateString.Substring(0, DateString.IndexOf("/"))
Dim NewDateString As String = ""
If TestDateString.Length = 2 Then
NewDateString = DateString.Substring(0, 10)
Else
NewDateString = DateString.Substring(0, 8)
End If
NewDateString = NewDateString + " 12:00:00 AM"
NewDateString = CObj("#" + NewDateString + "#")
Result = CDate(NewDateString)
Return Result
【问题讨论】:
-
# 日期周围的符号更像是 MSAccess(有时是 VB)的东西。
-
这篇 SO 帖子有一个很好的例子说明你正在尝试做什么:stackoverflow.com/questions/12971927/…
-
@tgolisch 这是一个完全不同的问题。
-
您能否澄清一下:为什么它与这个问题如此不同?该主题似乎与我非常相似(也许还有其他人),否则我不会建议它。
-
@tgolisch 我很快就会澄清(首先得下班回家)