【发布时间】:2022-02-01 16:31:36
【问题描述】:
考虑下面的代码。当 CEST 从夏季时间变为冬季时间时,我有一个日期列表。我需要将它们转换为 UTC。但是使用此代码会迷路,我无法理解如何修复它。
DateTime firstDate = new DateTime(2020, 10, 24, 21, 0, 0);
DateTime lastDate = new DateTime(2020, 10, 25, 3, 0, 0);
DateTime[] dates = Enumerable.Range(0, (lastDate - firstDate).Hours + 1)
.Select(r => firstDate.AddHours(r))
.ToArray();
TimeZoneInfo tzo = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
List<DateTimeOffset> offsets = new List<DateTimeOffset>();
foreach(var date in dates)
{
var timeSpan = tzo.GetUtcOffset(date);
var offset = new DateTimeOffset(date, timeSpan);
offsets.Add(offset);
}
10/24/2020 09:00:00 PM +02:00 = 19:00Z
10/24/2020 10:00:00 PM +02:00 = 20:00Z
10/24/2020 11:00:00 PM +02:00 = 21:00Z
10/25/2020 12:00:00 AM +02:00 = 22:00Z
10/25/2020 01:00:00 AM +02:00 = 23:00Z
10/25/2020 02:00:00 AM +01:00 = 01:00Z - What happened to 00:00Z?
10/25/2020 03:00:00 AM +01:00 = 02:00Z
【问题讨论】:
-
如果考虑到偏移量,实际上是22:00
-
“实际上是 22:00”是什么意思? 什么是22:00? (如果您的意思是“缺失的行”,那么不,不是 - 这将有效地减去偏移量两次......)
-
@JonSkeet 这是对我的(现已删除)评论的回复。这个问题最初是问“
00:00:00在哪里”,我评论指出它就在那里:'12:00:00 AM`。 -
@RichardDeeming:啊哈。感谢您的上下文。
标签: c# datetime timezone timezone-offset datetimeoffset