C#和sqlite日期,格式问题

时间:2012-10-16 18:06:23

标签: c# wpf sqlite

我有一个使用sqlite作为本地数据库的应用程序,但我的日期格式有问题。

我使用System.Data.Sqlite作为数据库提供程序,我创建了我的edmx,它是从sqlite数据库创建的。

当我对数据库进行查询时,在我的实体类中有一些日期字段,我可以看到dateTime属性具有正确的格式,在我的例子中,dd mm yyyy和18:00(小时是24小时,而不是例如12点。)

但是,当我对dataGrid执行绑定(我使用WPF和MVVM)时,在日期列中,日期格式为mm dd yyyy 12pm(小时不是24)。

为什么?,如果我以正确的格式接收数据,因为实体对象的日期格式正确我在dataGrid中看到其他格式的信息?当我使用SQL Server作为dataBase时,我没有这个问题,dataGrid中的格式是正确的。

我的窗口已配置为ES(西班牙)。

感谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

我猜测问题出在DateTime.Kind属性上。日期可以是本地,UTC或未知。检查日期是否使用相同的类型从数据库恢复,如果没有,请调整Sqlite连接参数以使用您希望使用的种类。

在我看来,处理此问题的正确方法是始终在数据库中将日期/时间存储为UTC,并始终使用等效的UTC表示法对数据库进行查询。您可以在Sqlite连接设置中将DateTime种类设置为UTC。如果您希望对象始终以这种方式表示时间,则可以确保对象在属性设置器中具有本地时间,如下所示:

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

从数据库加载后,应该确保时间保持在本地。

相关问题