错误:VB .Net中字符串的日期类型转换

时间:2014-10-22 18:18:11

标签: vb.net date datetime

对于以下代码,我收到此错误:“从字符串转换”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()格式化{ {1}}对象。我还尝试删除第二个强制转换,但仍然收到相同的错误(String行抛出错误)。

问题(S)

主要问题:如何适当地投射日期以包含指定时间?
第二个微不足道的问题:围绕Result = CDate(String...) #的问题是什么?这是SQL的“东西”吗?

到目前为止,我的上述工作无法正常工作:

Date

1 个答案:

答案 0 :(得分:1)

首先,日期是自某个时间点以来的刻度数。将其格式化为字符串然后转换为日期只会旋转CPU的轮子。

由于文化问题,您应始终使用NEW DATE(?,?,?,etc)

创建日期

其次,#是创建日期(和MS Access)的vb6方式,用于向后兼容。

第三,如果您有一个日期(没有时间或午夜时间),并且您希望它在6 AM之前,您只需添加所需的时间。 IE:

Dim d As Date = New Date(2014,1,1)
d = d.AddHours(6)
'Result: d = 1/1/2014 6:00:00 AM

最后,如果你有一个日期和时间,并且你想要删除时间,有很多方法,但这是我喜欢的方式:

Dim d As Date = Now
d = New Date(d.Year, d.Month, d.Day)