又一个日期格式问题:(

时间:2010-04-13 12:38:01

标签: vb.net datetime formatting

我似乎每天都有日期格式化问题!

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

dim dayNumber as integer = day.DayOfWeek 

但是当我将它转换为日期时,它会将其更改为#m / dd / yyyy#。 AHHHH!我怎么能改变这个?

这是我试过的代码

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

干杯

7 个答案:

答案 0 :(得分:4)

  

辉煌!这就是我想要的东西

这不是你想要的。这是约会的最糟糕的格式,因为它是如此可怕的模糊。日期字符串格式取决于当前文化。 “4/1/2010”是SO的独角兽日,1月份是欧洲的一天。 “#4/1/2010#”是传统的VB6格式。

始终在代码中的DateTime中存储日期。 始终在dbase中以日期时间的数据库列类型存储日期。从来没有任何歧义,你可以轻松地与DateTime成员一起操作日期。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

我可以问一下为什么你要逐行循环遍历表格吗?我曾在一家商店里工作,这是常态,但是因为我已经离开那里,我已经遇到了替代方案而且越来越多,我要找到循环通过数据表的错误。这是一种较旧的命令式编码风格,通常你想要一种声明性的编码风格。

答案 3 :(得分:0)

你是这样解析的吗?

Dim newDate as DateTime = DateTime.Parse(myDate)

答案 4 :(得分:0)

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

' 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)

答案 5 :(得分:0)

确保指定完全解析格式,如下所示:

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

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

答案 6 :(得分:0)

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

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

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