【问题标题】:Error: Date Type Conversion from String in VB .Net错误:VB .Net 中字符串的日期类型转换
【发布时间】: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 我很快就会澄清(首先得下班回家)

标签: vb.net date datetime


【解决方案1】:

首先,日期是自某个时间点以来的滴答数。将其格式化为字符串,然后转换为日期,只会让 CPU 运转起来。

由于文化问题,您应该始终使用 NEW DATE(?,?,?,etc) 创建日期

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

第三,如果您有一个日期(没有时间或截至午夜),并且您希望它是早上 6 点,您只需添加您想要的时间。即:

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)

【讨论】:

  • 我很欣赏时间文化表现的重要性,以及尝试用代码捕捉它的重要性;不幸的是,be 的权力没有(即使这是一个国际产品)。不知道“新日期”位。
  • 这回答了你的问题吗?
  • 最后一部分回答了这个问题,是的。
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多