2012-10-16 70 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,当我尝试按日期排序时,短是由字符串,而不是日期,所以顺序是不正确的。 –