2

私のユーザー設定には、ユーザーが選択できるすべての GMT 日付を含むドロップダウンがあります。

C#では、データベースに保存されている日時をGMT時間に変換するにはどうすればよいですか?

データベースに保存されている時刻は、サーバーの時刻です。

4

3 に答える 3

2

.NET 3.5以降では、システムタイムゾーン識別子をユーザーと一緒に保存し(から取得できます)、タイムゾーン間の変換にTimeZoneInfo.GetSystemTimeZones使用できます。TimeZoneInfo

// In a User class that has a string timeZoneId field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
    DateTime utcDate      = TimeZoneInfo.Local.ConvertToUtc(originalDate);
    TimeZone userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(this.timeZoneId);
    return   TimeZone.ConvertTime(utcDate, userTimeZone);
}

TimeZone.NET 2.0では、ローカルシステムでのみ使用できる古いクラスに制限されています。ユーザーの夏時間情報は自動的に取得されないため、基本的なGMT/UTCオフセットと一緒に自分で保存する必要があります。

// In a User class that has a double utcOffset field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
    DateTime utcDate = TimeZone.CurrentTimeZone.ToUniversalTime(originalDate);
    return utcDate.AddHours(this.utcOffset);
}

// Usage
DateTime localDate = user.GetLocalDateTime(DateTime.Now);
于 2009-10-28T13:33:04.917 に答える
1

各ユーザーのGMT差を保存していると思いますか?つまり、0 または +1 または -6 など?

// Get your DateTime to convert
DateTime databaseDateTime = DateTime.Now;
double userGmtOffset = 1;

// Get the GMT time of the database time
int hoursOffset = TimeZone.CurrentTimeZone.GetUtcOffset(databaseDateTime).Hours;
DateTime gmtDateTime = databaseDateTime.AddHours((double)(0 - hoursOffset));
DateTime userDateTime = gmtDateTime.AddHours(userGmtOffset);
于 2009-10-28T13:11:09.970 に答える
0

DateTime の代わりに System.DateTimeOffset を使用します。IT には、必要なすべての機能が含まれています。

于 2009-10-28T13:27:31.257 に答える