gpt4 book ai didi

c# - 将 UTC DateTime 转换为 DateTimeOffset

转载 作者:IT王子 更新时间:2023-10-29 04:25:04 30 4
gpt4 key购买 nike

我需要将 UTC 日期字符串转换为 DateTimeOffsets

这必须使用不同于计算机时区的时区。例如。当前计算机时区是 +02:00,但我想创建一个偏移量为 -4:00 的 DateTimeOffset。

我已经在 stackoverflow 上阅读了很多问题,但没有一个能解决我的问题。

这就是我需要做的:

输入:“2012-11-20T00:00:00Z”

输出: DateTimeOffset 具有:

  • 2012-11-20 00:00 的 UtcDateTime
  • 定义时区的正确 Utc 偏移量(本例中为 01:00)
  • 本地日期时间:2012-11-20 01:00(= UtcDateTime + 偏移量)

当然必须考虑夏令时。

编辑:为了让事情更清楚,请尝试完成以下代码片段:

DateTimeOffset result;
const string dateString = "2012-11-20T00:00:00Z";
var timezone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); //this timezone has an offset of +01:00:00 on this date

//do conversion here

Assert.AreEqual(result.Offset, new TimeSpan(1, 0, 0)); //the correct utc offset, in this case +01:00:00
Assert.AreEqual(result.UtcDateTime, new DateTime(2012, 11, 20, 0, 0, 0)); //equals the original date
Assert.AreEqual(result.LocalDateTime, new DateTime(2012, 11, 20, 1, 0, 0));

最佳答案

这是您正在寻找的解决方案:

const string dateString = "2012-11-20T00:00:00Z";
TimeZoneInfo timezone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); //this timezone has an offset of +01:00:00 on this date

DateTimeOffset utc = DateTimeOffset.Parse(dateString);
DateTimeOffset result = TimeZoneInfo.ConvertTime(utc, timezone);

Assert.AreEqual(result.Offset, new TimeSpan(1, 0, 0)); //the correct utc offset, in this case +01:00:00
Assert.AreEqual(result.UtcDateTime, new DateTime(2012, 11, 20, 0, 0, 0)); //equals the original date
Assert.AreEqual(result.DateTime, new DateTime(2012, 11, 20, 1, 0, 0));

请注意,您错误地测试了 .LocalDateTime 属性 - 总是会将结果转换为计算机的本地时区。您只需要 .DateTime 属性即可。

关于c# - 将 UTC DateTime 转换为 DateTimeOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933654/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com