我有一个使用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(西班牙)。
感谢。
答案 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(); }
}
从数据库加载后,应该确保时间保持在本地。