计算不同时区的DateTimes的差异

时间:2018-03-16 23:18:48

标签: c# datetime timezone

过去有两个事件(某个工作的开始和停止)发生在不同的时区。

我需要计算工作的持续时间。 我可以用分钟和计算持续时间来区分这些时区:

var duration = endTime - startTime.AddMinutes(diff);

但是,有一件事让我感到困惑 假设开始事件发生在加利福尼亚州并且结束事件在以色列说 现在这些时区之间的差异是9个小时 - 加利福尼亚刚刚转向日光,而以色列还没有 下周这个差异将是10个小时,因为以色列将会改变。

因此,如果现在和下周计算,持续时间会有所不同。

计算它的正确方法是什么? 使用DateTimeOffset

1 个答案:

答案 0 :(得分:1)

  

因此,如果现在和下周计算,持续时间会有所不同。

我认为你忘记了正在经历时间的你。不是项目的开始和结束时间。因此结果总是一样的。

虽然只是为了第二次将第一次转换为第一次的区域而被诱惑,所以它只是一个直接的差异。要从utc转换到任何其他区域,您可以使用以下代码

DateTime timeUtc = DateTime.UtcNow;

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);

Theres在https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-time-zones

也有很好的信息