【问题标题】:Yet another date formatting problem :(另一个日期格式问题:(
【发布时间】:2010-04-13 12:38:00
【问题描述】:

我好像每天都有日期格式问题!

我正在查询一个表,并以 dd/mm/yyyy 格式(作为字符串 btw)获取日期。杰出的!这就是我想要的。但是,现在我想将该字符串转换为日期,以便我可以这样做

dim dayNumber as integer = day.DayOfWeek 

但是当我将其转换为日期时,它会将其更改为#m/dd/yyyy#。啊啊啊!我该如何更改?

这是我尝试过的代码

Dim ActivityDate As String
If dt.Rows(i)("Date") Is DBNull.Value Then
    ActivityDate = ""
Else
    ActivityDate = dt.Rows(i)("Date")
End If

Dim ci As New System.Globalization.CultureInfo("en-CA")
Dim theDate As Date = Date.Parse(ActivityDate, ci)

Dim day As Integer = theDate.DayOfWeek

干杯

【问题讨论】:

  • 为什么要从数据库中提取字符串日期? 这应该是一个日期时间列,这意味着您可以直接将非空值分配给一个日期时间变量。

标签: vb.net datetime formatting


【解决方案1】:

太棒了!这就是我想要的

这不是你想要的。这是最糟糕的日期格式,因为它非常模棱两可。日期字符串格式取决于当前的文化。 “4/1/2010”是 SO 的独角兽日,是欧洲的一月日。 “#4/1/2010#”是旧版 VB6 格式。

始终将日期存储在代码中的 DateTime 中。 始终 将日期存储在数据库中的 datetime 数据库列类型中。绝不会有任何歧义,您可以轻松地与 DateTime 成员一起操作日期。

【讨论】:

    【解决方案2】:

    如果将字符串转换为日期,则始终可以使用自定义格式字符串将其输出回原始格式:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

    【讨论】:

    • 我尝试了链接中的一些示例,但没有一个正确格式化。
    【解决方案3】:

    这里的正确解决方案(至少在您告诉我们为什么不可能之前)是更新您的数据库以使用 datetime 列类型而不是 varchar。现在我们也知道该列没有 NULL 值,否则您会在 Date.Parse() 调用中抱怨异常。应用这两个句子后,您可以将所有代码精简为一个简单的单行:

    Dim day As Integer = DirectCast(dt.Rows(i)("Date"), DateTime).DayOfWeek
    

    我还想问你为什么要逐行遍历表格?我曾在一家以这种方式为常态的商店工作,但自从我离开那里后,我遇到了替代方案,而且我越来越发现循环遍历数据表是错误的。这是一种较旧的命令式编码风格,通常您希望采用声明式编码风格。

    【讨论】:

      【解决方案4】:

      你是这样解析的吗:

      Dim newDate as DateTime = DateTime.Parse(myDate)
      

      【讨论】:

      • 我不是。试过了,还是一样。
      【解决方案5】:

      如果您的系统文化不使用该日期格式,那么您应该将该日期字符串作为实际日期:

      ' canadian date format is dd/mm/yyyy 
      Dim ci As New System.Globalization.CultureInfo("en-CA")
      Dim theDate As Date = Date.Parse("13/04/2010", ci)
      

      【讨论】:

      • 我已将日期检索为字符串。所以将从字符串转换为日期。我尝试了您的示例,但它从未更改格式:( 我已将代码添加到我的帖子中
      【解决方案6】:

      确保您指定了一个准确的解析格式,如下所示:

      Console.WriteLine(DateTime.ParseExact("17/12/2010", "dd/mm/yyyy", null));
      

      我不确定最后一个参数是什么,但忽略它是安全的。

      【讨论】:

        【解决方案7】:

        我猜您在调试器中看到了#m/dd/yyyy#,如下面的屏幕截图所示。不用担心!

        Date 变量未存储为字符串。调试器必须将您的Date 转换为字符串以显示它,并且它坚持 以#m/dd/yyyy# 格式显示日期。但这对程序的运行时行为没有任何影响。

        Screenshot of Visual Studio Debugger http://img707.imageshack.us/img707/6205/debugger.gif

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-20
          • 2014-04-01
          • 1970-01-01
          • 2016-01-25
          相关资源
          最近更新 更多