Csharp/C#教程:将UTC DateTime转换为DateTimeOffset分享


将UTC DateTime转换为DateTimeOffset

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

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

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

这就是我需要做的事情:

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

输出: DateTimeOffset:

当然,必须考虑夏令时。

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

 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"; var timezone = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); //this timezone has an offset of +01:00:00 on this date var utc = DateTimeOffset.Parse(dateString); var 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属性。

这是你想要的吗:

 [Test] public void ParseUtcDateTimeTest() { DateTime dateTime = DateTime.Parse("2012-11-20T00:00:00Z"); Assert.AreEqual(new DateTime(2012, 11, 20, 01, 00, 00), dateTime); DateTimeOffset dateTimeOffset = new DateTimeOffset(dateTime); Assert.AreEqual(new TimeSpan(0, 1, 0, 0), dateTimeOffset.Offset); } 

这对您的转换有用:

 [Test] public void ConvertTimeTest() {  DateTime dateTime = DateTime.Parse("2012-11-20T00:00:00Z");  TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");  DateTime convertedTime = TimeZoneInfo.ConvertTime(dateTime, cstZone);  Assert.AreEqual(new DateTime(2012, 11, 19, 18, 00, 00), convertedTime);  TimeSpan baseUtcOffset = cstZone.BaseUtcOffset;  Assert.AreEqual(new TimeSpan(0, -6, 0, 0), baseUtcOffset); } 

 const String dateString = "2012-11-20T00:00:00Z"; var offsetDate = DateTimeOffset.Parse(dateString); var offsetDate2 = DateTime.Parse(dateString); 

输出是

上述就是C#学习教程:将UTC DateTime转换为DateTimeOffset分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 offsetDate {20-11-2012 0:00:00 +00:00} System.DateTimeOffset offsetDate2 {20-11-2012 1:00:00} System.DateTime 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1021753.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

精彩推荐