2010-04-13 66 views
1

我似乎每天有日期格式的問題!另一個日期格式的問題:(

我查表和我得到的日期早在格式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 

乾杯

+2

爲什麼要從數據庫中提取字符串日期? _這應該是一個日期時間列,_這意味着您可以直接將非空值分配給日期時間變量。 – 2010-04-13 16:29:58

回答

4

太棒了!多數民衆贊成在我想要的

這不是你想要的。這是最糟糕的日期格式,因爲它非常模糊。日期字符串格式取決於當前的文化。 「4/1/2010」是獨角獸在SO的日子,它是1月份在歐洲的日子。 「#4/1/2010#」是一種傳統的VB6格式。

總是將代碼中的DateTime存儲日期。 總是將日期存儲在您的dbase中的datetime數據庫列類型中。永遠不會有任何不明確之處,您可以輕鬆使用DateTime成員來操作日期。

+0

謝謝我要改變我的列類型。 – iamjonesy 2010-04-15 07:40:33

0

你分析它是這樣的:

Dim newDate as DateTime = DateTime.Parse(myDate) 
+0

我不是沒有。試過了,它也是一樣的。 – iamjonesy 2010-04-13 12:53:33

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) 
+0

我已經檢索日期作爲字符串。所以將從字符串轉換爲日期。我試過你的例子,但它從來沒有改變格式:( 我已經將代碼添加到我的帖子 – iamjonesy 2010-04-13 12:48:03

0

確保指定了以下這樣一個精確的解析格式:

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

我不知道最後的參數是什麼,但它是安全的忽略它。

+0

謝謝,但它沒有工作: ( – iamjonesy 2010-04-13 12:58:54

1

這裏的正確的解決方案(至少直到你告訴我們爲什麼這是不可能的),是更新數據庫中使用日期時間列類型,而不是一個varchar。現在我們也知道這個列沒有NULL值,否則你會在你的Date.Parse()調用中抱怨異常。同時應用這些句子後,您可以向下修整所有的代碼到一個簡單的一行:

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

我還想問你爲什麼在表中逐行循環?我曾在一家商店裏工作過,但是因爲我已經離開了那裏,所以我越來越多地選擇了替代品,越來越多的人開始尋找循環訪問數據表的方法。這是一種較老的命令式編碼風格,並且通常您想要使用聲明式編碼風格。