4

フリート管理では、トラッカーはタイムゾーンを越えて移動し、その位置を常に UTC のタイムスタンプで保存します。1 つのタイムゾーンに固執する必要があるため、これは良いことです。そうしないと、タイムゾーンを変更すると、同じタイムスタンプを持つ 2 つの異なる位置を持つ可能性があります(i.e. for daylight saving time).

フリート マネージャーが私のソフトウェアを使用してデータを確認する場合、タイムスタンプが混在している場合でも、ローカル タイムゾーンで時刻を確認したいと考えています (理由はわかります)。

これを実現するために、データベースに UTC 時間として保存し、表示時に現地時間に変換します。私が使う:

DateTime.SpecifyKind(date, dateTimeKind)
DateTime.ToUniversalTime()
DateTime.ToLocalTime()

したがって、誰もが最高潮のハマグリと同じくらい幸せになるはずですが、一部のテーブルは DataGridView の DataSource として設定されています(Windows.System.Forms.DataGridView.DataSource = System.Data.DataTable)。これ自体は悪くありませんが、その間に変換を入れる方法がわかりません。

表示するタイムゾーンを示すために .Format プロパティを使用できればDataGridViewCellStyle幸いですが、私が理解している限り、これはオプションではありません。現在、一部のテーブルでは両方の時間がデータベースに保存されているため、ユーザーはどちらの時間を表示/非表示にするかを決定しますがDateTime、データベースのすべての列を2倍にして表示/非表示機能を配置する必要がある場合、これは本当に面倒ですその次。

あなたはどの方法を提案しますか?RowCreatedEvent(ここ)について読みましたが、Web アプリケーションを構築していません。

4

1 に答える 1

3

イベントを使用できますCellFormatting

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.Value is DateTime)
    {
        var date = (DateTime)e.Value;
        var localDate = date.ToLocalTime();
        e.Value = localDate;
        e.FormattingApplied = true;
    }
}
于 2013-10-01T12:34:26.610 に答える