4

以前我遇到过这个问题并按照帖子中的描述解决了

目前在夏令时实施之后,我观察到如果我选择的问题

 DateTime startDate=new DateTime(2012,1,20); //Eastern Timezone (UTC -5:00)

序列化后会将其转换为:

string serializeDate= serializer.Serialize(startDate); //In ticks 20-Jan 2012 05:00AM

关于反序列化和ToLocalTime()

DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate);
afterDeserialize.ToLocalTime();

它工作得很好,直到:

日期时区

我取消选中Automatically adjust clock for Daylight Saving Time.

现在它的序列化添加4:00 hours(由于夏令时)但由于环境夏令时而ToLocalTime()减去,这会改变我的对象的日期减去一天。-5:00 hours

如何在两次转换中注入当前环境夏令时?

4

1 回答 1

1

您需要存储时区的偏移量,然后在转换后重新应用它。

要使其动态化(正如您在评论中所说),您可以首先获取当前时区:

TimeZoneInfo tzi = TimeZoneInfo.Local;
TimeSpan offset = tzi.GetUtcOffset(myDateTime);

然后做:

DateTime startDate=new DateTime(2012,1,20).Add(offset);

然后序列化后:

DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate);
afterDeserialize.ToLocalTime().AddOffset(offset);
于 2013-05-07T07:53:14.040 回答