0

fileDate次の形式の日付値を持つ文字列 (変数は) があります。

2011 年 2 月 12 日 11:58 午前

これを日付に変換してから、異なるマシンで日付を比較する際に問題があるため、UTC 時間ベースに変換したいので、*すべての文字列 (比較対象) を常に Utc_date 値に変換したい.*

以下のコードを試しましたが、上記の文字列を Datetime ベースに変換できないため (秒がないため)、機能しませんでした。

DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");

上記は FormatException を示して機能しませんでした。助けてくれませんか?

4

3 に答える 3

2

まず、DateTime.ParseExactまたはを使用することをお勧めしTryParseExactます。サンプルが12月2日か2月12日かはわかりません。形式を指定すると、が削除される可能性がありますFormatException

次の問題は、変換するタイムゾーンを特定することです。11:58はあるタイムゾーンの現地時間であると言っていますか、それともすでにUTC時間です。

  • これを実行しているコードのタイムゾーンの現地時間である場合はDateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal、解析の一部として使用できます。
  • すでに普遍的な時間である場合は、DateTimeStyles.AssumeUniversal
  • 別のタイムゾーンの現地時間の場合は、を使用TimeZoneInfoして変換を実行する必要があります。

また、現地時間の場合は、2つのコーナーケースを考慮する必要があります(夏時間を採用するタイムゾーンを使用していると仮定します)。

  • クロックが進むとき、DST遷移のために、現地時間がスキップされる場合があります。したがって、時計が午前1時から午前2時までスキップする場合、午前1時30分はまったく存在しません。
  • クロックが戻ると、DST遷移のために、現地時間があいまいになる場合があります。したがって、時計が午前2時から午前1時に戻る場合、午前1時30分は異なるUTC時間に2回発生します。どの発生に関心がありますか?

これらのケースをどのように処理するかを決定し、単体テストでカバーされていることを確認する必要があります。

もう1つのオプションは、日付と時刻のライブラリであるNoda Timeを使用することです。これは、「ローカルの日付/時刻」と「特定のタイムゾーンの日付/時刻」(およびその他)の概念をより明確に分離します。

于 2012-03-15T06:47:07.540 に答える
0

あなたが使用することができます: DateTime.Now.ToUniversalTime();

「DateTime.Now」を使用する必要があると言うつもりはありませんが、DateTimeオブジェクトの一部として、それをユニバーサル時間に変換するメソッドがあるという点がわかります。

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

于 2012-03-15T06:47:07.913 に答える
0

DateTime.ParseExact適切な DateTime インスタンスに値を取得するために使用する必要が.ToUniversalTime()あり、UTC 時刻を取得するために使用できます (これは、サーバー マシンの時間の差に関するものです)。

于 2012-03-15T06:46:44.170 に答える