过去有两个事件(某个工作的开始和停止)发生在不同的时区。
我需要计算工作的持续时间。 我可以用分钟和计算持续时间来区分这些时区:
var duration = endTime - startTime.AddMinutes(diff);
但是,有一件事让我感到困惑 假设开始事件发生在加利福尼亚州并且结束事件在以色列说 现在这些时区之间的差异是9个小时 - 加利福尼亚刚刚转向日光,而以色列还没有 下周这个差异将是10个小时,因为以色列将会改变。
因此,如果现在和下周计算,持续时间会有所不同。
计算它的正确方法是什么?
使用DateTimeOffset
?
答案 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
也有很好的信息