从字符串创建DateTime而不应用时区或夏令时

Jou*_*man 7 .net c# timezone datetime datetime-parsing

如何从已针对UTC调整的字符串创建DateTime var?我在设置为BST(GMT + 1)的机器上运行它.如果我运行以下代码行:

DateTime clientsideProfileSyncStamp = Convert.ToDateTime("20-May-2011 15:20:00");
Run Code Online (Sandbox Code Playgroud)

然后在对数据库保存(UTC)值的测试中使用该值,然后看起来Convert.ToDateTime()实际上给我的UTC值为14:20.我不希望它进行转换 - 我只是希望它接受我的DateTime字符串已经是UTC.

谢谢.

Guf*_*ffa 17

解析字符串,并指定在字符串中没有指定时区时它应该采用UTC时间:

DateTime clientsideProfileSyncStamp =
  DateTime.Parse(
    "20-May-2011 15:20:00",
    CultureInfo.CurrentCulture,
    DateTimeStyles.AssumeUniversal
  );
Run Code Online (Sandbox Code Playgroud)


Mat*_*lls 11

使用

DateTimeOffset.Parse
Run Code Online (Sandbox Code Playgroud)

广告不足DateTimeOffset类型表示一个时间点,与时区差异无关,因此应优先使用需要"时间戳"的DateTime.

  • @Journeyman,只需访问`DateTimeOffset` 变量的`DateTime` 属性:`dtVar = dtoffsetVar.DateTime` (2认同)

小智 5

@Guffa 的回答非常好,但我想添加一个额外的答案。如果您的日期时间字符串类似于“2017-11-27T05:30:00.000Z”,则 AssumeUniversal 不起作用。尝试这个 :

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

AssumeUniversal 和 AdjustToUniversal 之间略有不同。在这里阅读:AssumeUniversal 和 AdjustToUniversal 之间的区别