2013-09-01 138 views
1

我是MySQL和C#的新手。MySql中的日期類型

我將某些值存儲在數據類型爲Date的列中。我不想要時間,只有日期被儲存。 上觀看使用phpMyAdmin或MySQL命令行這些價值觀,我看到他們在格式:

YYYY-MM-DD

然而,當我在我的web應用程序檢索這些值,它們顯示採用以下格式:

YYYY-MM-DD HH:MM(具體時間爲12:00)。

爲什麼會發生這種情況?我怎樣才能防止這種情況發生?

+0

http://www.dotnetperls.com/datetime-format你可能希望看到這一點。 –

+0

謝謝!書籤。對於像我這樣的初學者來說非常有用的信息.. –

+0

不客氣! :) –

回答

0

您可以將日期轉換爲使用date_format()當你獲取數據你喜歡的格式,:

select date_format(datecol, '%Y-%m-%d') 

這將返回值作爲一個字符串。

+0

謝謝!這爲我做了詭計。但是我認爲下次我會使用_DATETIME_而不是_DATE_ ..更不用說麻煩了。 –

2

當你在C#中存儲你的日期字段時,你使用DateTime對象。在這個對象中,當你不指定時間部分的時候會把一個默認值取決於全球化。

你可以學習的DateTime如何工作here

+0

但我將檢索到的Date類型值轉換爲一個字符串(使用** toString()**),然後打印該字符串。 那麼爲什麼時間出現在最終的字符串中? –

+0

@SinghSiddharth。 。 。在你調用'toString()'的時候,你在C#中,並且該值已被視爲日期時間。 –

0

你不應該從mysql獲取字符串的值。爲什麼?因爲如果您需要對該值執行任何操作(例如添加一天),則需要再次將其解析爲DateTime。字符串解析速度可能會很慢,並且當涉及到日期時,它們很容易出現錯誤解釋,例如對mm/dd/yyyy和dd/mm/yyyy格式的誤解。

您遇到的問題是,.NET不具有Date類型。它只有DateTime類型。因此加載一個MySQL DATE類型,將獲得DateTime,其中時間部分設置爲午夜。

除了如何輸出結果之外,沒有直接的問題。如果你只是打電話.ToString()沒有任何參數,或者你隱式地使用它作爲一個字符串,那麼你會得到一個完整的日期和時間的結果。您只需提供一個參數來指示您想要的格式。

沒有任何參數,您將獲得通用"G"格式。這在文檔here中有解釋。

換句話說:

yourDateTime.ToString() == yourDateTime.ToString("G") 

你可以閱讀所有的其他格式提供,herehere

特別是,如果你只是想日期,那麼你可能想這樣做:

yourDateTime.ToString("d") 

根據您的意見,您應該改爲這樣:

MySQL查詢:

SELECT Gbstartdate FROM TblGbDef 

C#:

DateTime gb_start_date = (DateTime) datareader[0]; 
+0

好的,謝謝!我也會嘗試這一切。這是我現在正在完成我的工作:_My SQL query_:SELECT date_format(Gbstartdate,'%Y-%m-%d')FROM TblGbDef DateTime gb_start_date = DateTime.ParseExact(datareader [0] .ToString( ),「yyyy-MM-dd」,System.Globalization.CultureInfo.InvariantCulture);''TimeSpan days_elapsed_ts = current_date - gb_start_date;''int days_elapsed = days_elapsed_ts.Days;' –

+0

@SinghSiddharth - 查看我更新的答案。 –