2012-10-16 102 views
0

問題我有一個應用程序使用sqlite作爲本地數據庫,但我有日期格式的問題。C#和sqlite的日期,與格式

我使用System.Data.Sqlite作爲數據庫提供程序,並創建了我的edmx,它是從sqlite數據庫創建的。

當我對數據庫進行查詢時,在具有某個日期字段的實體類中,我可以看到dateTime屬性具有正確的格式,在我的情況下是dd mm yyyy和18:00(小時是例如24小時,而不是12點)。但是,當我對數據網格進行綁定(我使用WPF和MVVM)時,日期的格式是mm dd yyyy 12pm(小時不是24)。

爲什麼?如果我以正確的格式接收數據,因爲實體對象的日期格式正確,我在dataGrid中看到其他格式的信息?當我使用SQL Server作爲dataBase時,我沒有這個問題,格式在dataGrid中是正確的。

我的窗戶被配置爲ES(西班牙)。

謝謝。

回答

1

我想這個問題是與DateTime.Kind屬性。日期可以是本地,UTC或未知。使用相同的Kind-ness檢查日期是否從數據庫恢復,如果沒有,請調整您的Sqlite連接參數以使用您希望使用的Kind。

在我看來,處理這種問題的正確方法是始終將日期/時間存儲爲數據庫中的UTC,並始終使用等效的UTC表示法對數據庫進行查詢。您可以在Sqlite連接設置中將DateTime類型設置爲UTC。你可以確保你的對象有本地時間在你的屬性設置,如果你要的對象始終代表的是那個樣子,就像這樣:

public DateTime YourDateTimeProperty 
{ 
    get { return _dateTime; } 
    set { _dateTime = value.ToLocalTime(); } 
} 

這應確保留的時間從數據庫中被加載後局部。

+0

儘管我更改了連接字符串中的參數,但在dataGrid中我仍然看到格式爲MM/dd/yyyy,並且我希望格式爲yyyy/MM/dd。 –

+0

我能想到的唯一的另一件事是你的文化背景有問題。日期顯示正確,如果你做date.ToString(CultureInfo.CurrentCulture)和date.ToString(CultureInfo.CurrentUICulture)?如果沒有,你應該設置那些默認情況下會產生你想要的日期格式的文化。 –

+0

如果您只想更改日期/時間格式並保持當前文化的其餘部分不變,則可以更改CultureInfo.CurrentCulture.DateTimeFormat/CultureInfo.CurrentUICulture.DateTimeFormat –

2

使用可以使用此XAML

Binding="{Binding MyColumn, StringFormat=MM/dd/yyyy}" 

使用此代碼DataGridTextColumn標籤。

這是一個示例代碼。

<sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn 
      Header="MyHeader" 
      Width="Size" 
      Binding="{Binding MyDateColumn, StringFormat=MM/dd/yyyy}" /> 
</sdk:DataGrid.Columns> 
+0

問題是,如果我設置列的stringFormat,當我嘗試按日期排序時,短是由字符串,而不是日期,所以順序是不正確的。 –