【问题标题】:How to Convert UTC DateTime to Different Time zone DateTimeOffSet during DayLightSavingTime Enable using c#如何使用 c# 在 DayLightSavingTime 启用期间将 UTC DateTime 转换为不同的时区 DateTimeOffSet
【发布时间】:2018-09-12 13:59:16
【问题描述】:

我从数据库中获得了日期和时间(UTC 时间),我需要转换为 cst 时区。我尝试了以下代码,但它没有转换日期和时间。

DateTimeOffset returnTime = TimeZoneInfo.ConvertTime(time, timeZone);

输入

time = {3/11/2018 3:24:19 AM}

timeZone = {(UTC-06:00) Central Time (US & Canada)}

夏令时已启用

预期输出

returnTime = {3/10/2018 10:24:19 PM}

实际输出

returnTime = {3/11/2018 03:24:19 AM}

请帮忙解决这个问题。

【问题讨论】:

  • 请注意DateTime 实例在某些时区没有夏令时组件,您需要手动调整。如果 DB 值已经是 UTC 格式,请尝试添加 TimeZoneInfo.Local
  • 您确定需要这样做吗?如果可以的话,最好将 UTC 日期时间返回给用户应用程序,并允许它显示在用户的本地时区中。
  • 输入日期时间是什么.Kind?绝对是UTC
  • @TetsuyaYamamoto 时间是 DateTime 变量,我已经将 Offset 值传递给它。
  • @pmcilreavy 在这里我需要获取日期表单 returnTime 值以进行日期比较,这就是原因。

标签: c# asp.net-mvc datetime timezone datetimeoffset


【解决方案1】:

使用TimeZoneInfo.ConvertTimeFromUtc,我认为您的问题会消失。还要确保输入 DateTime.Kind 是 'UTC'。

// a date before DST starts
var beforeDstUtc = new DateTime(2018, 3, 1, 13, 0, 0, DateTimeKind.Utc);
// a date after DST starts
var afterDstUtc = new DateTime(2018, 4, 1, 13, 0, 0, DateTimeKind.Utc);

var cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

var cstTime1 = TimeZoneInfo.ConvertTimeFromUtc(beforeDstUtc, cstZone);
var cstTime2 = TimeZoneInfo.ConvertTimeFromUtc(afterDstUtc, cstZone);

var expectedBeforeDstLocal = new DateTime(2018, 3, 1, 07, 0, 0, DateTimeKind.Local);
var expectedAfterDstLocal = new DateTime(2018, 4, 1, 08, 0, 0, DateTimeKind.Local);

// should be -6 hours
Assert.AreEqual(expectedBeforeDstLocal, cstTime1);
// should be -5 hours
Assert.AreEqual(expectedAfterDstLocal, cstTime2);

【讨论】:

  • 对于 TimeZoneInfo.ConvertTimeFromUtc 在这里它在夏令时启用时间期间不起作用。我已经试过了。
  • @M.Nishanthan 真的吗?我更新了我的答案以表明它确实考虑了 DST。
  • @M.Nishanthan 它表明,如果我们在夏令时开始之前(例如 3 月 1 日)从 UTC DateTime 开始并转换为 CST,那么我们会得到 -6 小时,但如果我们从 UTC DateTime 开始在夏令时之后(例如 4 月 1 日),我们得到一个本地 CST 日期时间,即 -5 小时。所以在我看来 ConvertTimeFromUtc 确实处理 DST。另请参阅此答案 - stackoverflow.com/questions/23158015/…
猜你喜欢
  • 2014-12-05
  • 2012-12-05
  • 2021-02-14
  • 2016-07-22
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多