11

UTC用にすでに調整されている文字列からDateTime変数を作成するにはどうすればよいですか?これは、BST(GMT + 1)に設定されたマシンで実行しています。次のコード行を実行すると、次のようになります。

DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00");

次に、(UTC)値を保持しているデータベースに対するテストで値を使用すると、Convert.ToDateTime()が実際に14:20のUTC値を提供しているように見えます。変換を実行したくありません。DateTime文字列がすでにUTCになっていることを受け入れてほしいだけです。

ありがとう。

4

6 に答える 6

19

文字列を解析し、文字列にタイムゾーンが指定されていない場合にUTC時刻を想定するように指定します。

DateTime clientsideProfileSyncStamp =
  DateTime.Parse(
    "20-May-2011 15:20:00",
    CultureInfo.CurrentCulture,
    DateTimeStyles.AssumeUniversal
  );
于 2011-05-20T15:09:17.180 に答える
14

使用する

DateTimeOffset.Parse

アンダーアドバタイズされDateTimeOffsetたタイプは、タイムゾーンの違いに関係なく特定の時点を表すため、「タイムスタンプ」が必要なDateTimeよりも優先して使用する必要があります。

于 2011-05-20T15:05:01.707 に答える
6

@Guffaの答えはとても良いですが、私は追加の答えを追加したいと思います。日時文字列が「2017-11-27T05:30:00.000Z」のようになっている場合、AssumeUniversalは機能していません。これを試して :

    DateTime.Parse("2017-11-27T05:30:00.000Z", null, System.Globalization.DateTimeStyles.AdjustToUniversal);

AssumeUniversalとAdjustToUniversalにはわずかな違いがあります。ここを読む:AssumeUniversalとAdjustToUniversalの違い

于 2017-11-28T06:24:18.423 に答える
2

ZDateTime文字列にを追加します。

DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00Z");
Console.Write(clientsideProfileSyncStamp.ToUniversalTime()); // 20-May-2011 15:20:00
于 2011-05-20T15:06:24.550 に答える
2

TryParse例外なく解析エラーを処理できるバリアントを忘れないでください

DateTime clientsideProfileSyncStamp;
DateTime.TryParse(
    "20-May-2011 15:20:00",
    System.Globalization.CultureInfo.CurrentCulture,
    System.Globalization.DateTimeStyles.AssumeUniversal,
    out clientsideProfileSyncStamp
);

また、使用していない場合、ParseExactまたは出力がTryParseExactであると想定される場合は、使用することもできますKindLocalToUniversalTime()

clientsideProfileSyncStamp.ToUniversalTime();
于 2015-07-28T05:34:07.293 に答える
0

DateTime.Parse()またDateTime.TryParse()

var clientsideProfileSyncStamp = DateTime.Parse("20-May-2011 15:20:00");
于 2011-05-20T15:02:34.280 に答える