web-dev-qa-db-ja.com

文字列をタイムゾーン付きの日時にフォーマット

string s = "May 16, 2010 7:20:12 AM CDT DateTimeオブジェクトに変換したい。以下のコードでは、既知の形式でテキストを解析しようとすると、日付形式を変換できないというエラーが表示されます。

timeStamp = matches[0].Groups[1].Value;
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null);

タイムゾーンはCDT UTCとして届きます...そして問題の原因は何ですか、それとも私のフォーマットですか?

14
Warz

中央夏時間

これを試して:

string dts = "May 16, 2010 7:20:12 AM CDT";
DateTime dt = 
    DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null);

編集:

夏時間については DateTime.IsDaylightSavingTime および TimeZone.CurrentTimeZone を検討してください。

カスタムの日付と時刻のフォーマット文字列

9
rumburak

DateTimeが明確にDateTimeKind.Utcであることを確認してください。 「GMT」は避けてください。夏時間にはあいまいです。

    var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
    string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz");

出力されます:2010年12月31日19:01:01 pm GMT-06:00

詳細については、これを参照してください Link

6
user1542538