0

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

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

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

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

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

我的 Windows 配置为 ES(西班牙)。

谢谢。

4

2 回答 2

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>
于 2012-10-16T18:17:16.523 回答
1

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

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

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

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

于 2012-10-16T18:21:02.193 回答