0

ローカル データベースとして sqlite を使用するアプリケーションがありますが、日付の形式に問題があります。

System.Data.Sqlite をデータベース プロバイダーとして使用しており、sqlite データベースから作成された edmx を作成しています。

データベースにクエリを実行すると、いくつかの日付フィールドを持つエンティティ クラスで、dateTime プロパティの形式が正しいことがわかります。私の場合は、dd mm yyyy と 18:00 (時間は 24 時間です。たとえば、午後 12 時ではありません)。

ただし、dataGrid へのバインディング (WPF と MVVM を使用しています) を行う場合、日付の列では、日付の形式は mm dd yyyy 12pm (時間は 24 ではありません) です。

エンティティ オブジェクトの日付が正しい形式であるため、正しい形式でデータを受け取った場合、dataGrid に他の形式で情報が表示されるのはなぜですか? SQL Server をデータベースとして使用する場合、この問題は発生しません。dataGrid の形式は正しいです。

私のウィンドウは 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、または不明のいずれかです。日付が同じ Kind-ness でデータベースから復元されていることを確認し、そうでない場合は、Sqlite 接続パラメーターを調整して、操作したい Kind を使用します。

私の意見では、これを処理する適切な方法は、常に日付/時刻を UTC としてデータベースに格納し、常に同等の UTC 表現を使用してデータベースに対してクエリを実行することです。Sqlite 接続設定で DateTime の種類を UTC に設定できます。オブジェクトが常にそのように時間を表すようにしたい場合は、プロパティ セッターでオブジェクトがローカル時間を持っていることを確認できます。

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

データベースからロードされた後、時間がローカルのままであることを保証する必要があります。

于 2012-10-16T18:21:02.193 に答える