2

時間の値と複数のタイム ゾーンで頭が痛いです。新しい DateTime 値を UTC 時間で保存していますが、LinqDataSource と GridView を使用して変更しようとすると問題が発生します。

正確な時刻を簡単に表示できます

<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# TimeManager.ToLocalTime((DateTime)Eval("OrderDate")) %>' />
</ItemTemplate>

現在、これは DB に保存されている UTC 時間に 1 時間を追加します。

ただし、ソースにバインドするのは簡単ではありません。Bind("OrderDate") は、TimeManager.ToGlobalTime((DateTime)Bind("OrderDate")) のように変更できません。

LinqDataSource の OnUpdating イベントを使用して値をグローバル時間に更新することを考えていましたが、ユーザーが日付フィールドではなく他のフィールドを変更した場合はどうなりますか? 彼が記録時間を更新するたびに、1 時間分の値が小さくなります。

ユーザーは日時ではなく日時の日付部分を変更できるため、古い値と新しい値を比較することもできません。これはタイムゾーンの影響を受けますか?

グリッドビューのすべての状態で現地時間を表示する方法があれば、LinqDataSource の OnUpdating を簡単に使用できます。

あなたの考えを共有してください...

4

2 に答える 2

3

モデルを変更することを検討しましたか? バインド先のオブジェクトの名前が CustomerOrder であると仮定しましょう。次のクラスをプロジェクトに追加できます (Linq オブジェクトと同じ名前空間内)。

public partial class CustomerOrder
{
    public DateTime LocalOrderDate
    {
        get { return TimeManager.ToLocalTime(OrderDate); }
        set { OrderDate = TimeManager.ToUTCTime(value); }
    }
}

ここで、OrderDate にバインドする代わりに、LocalOrderDate にバインドします。これにより、UTC / 現地時間から OrderDate への変換が自動的に行われます。

(注: TimeManager.ToLocalTime() と TimeManager.ToUTCTime() が適切に定義されていると仮定しています)

于 2009-02-06T19:48:13.733 に答える