web-dev-qa-db-ja.com

DateTime値のタイムゾーン(または種類)を設定する方法

DateTime変数に厳密なUTC時間を保存し、ISO 8601形式で出力することを意味します。

最後に、.ToString( "yyyy-MM-ddTHH:mm:sszzz")を使用しましたが、タイムゾーンがUTC + 01:00であることがわかりました。

.Kind = DateTimeKind.Utcを使用しようとしましたが、Kindプロパティにはセッターがありません。

UTCの時刻を明示的に指定するにはどうすればよいですか? Kindプロパティはどのように設定されますか?

38
Ivan

DateTime.Kindプロパティにはセッターがありませんが、静的メソッド DateTime.SpecifyKind は、Kindに指定された値を持つDateTimeインスタンスを作成します。

別の方法として、DateTimeKindパラメータを取る複数の DateTimeコンストラクタオーバーロード があります

31
Frank Boyne

ローカルマシンのタイムゾーンを利用したい場合は、myDateTime.ToUniversalTime()を使用してローカル時間からUTC時間を取得するか、myDateTime.ToLocalTime()を使用してUTC時間をローカルマシンの時間に変換できます。

_// convert UTC time from the database to the machine's time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var localTime = databaseUtcTime.ToLocalTime();

// convert local time to UTC for database save
var databaseUtcTime = localTime.ToUniversalTime();
_

他のタイムゾーンとの間で時間を変換する必要がある場合は、TimeZoneInfo.ConvertTime()またはTimeZoneInfo.ConvertTimeFromUtc()を使用できます。

_// convert UTC time from the database to japanese time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var japaneseTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var japaneseTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, japaneseTimeZone);

// convert japanese time to UTC for database save
var databaseUtcTime = TimeZoneInfo.ConvertTimeToUtc(japaneseTime, japaneseTimeZone);
_

利用可能なタイムゾーンのリスト

MSDNのTimeZoneInfoクラス

46
SandRock

これも試してみてください、実装は簡単です

TimeZone time2 = TimeZone.CurrentTimeZone;
DateTime test = time2.ToUniversalTime(DateTime.Now);
var singapore = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time");
var singaporetime = TimeZoneInfo.ConvertTimeFromUtc(test, singapore);

変更する標準時間のテキストを変更します。

C#のTimeZone機能を使用して実装します。

6
Sandeep Nair