gpt4 book ai didi

c#-4.0 - JavaScriptSerializer从日期减去一天

转载 作者:行者123 更新时间:2023-12-03 12:13:47 24 4
gpt4 key购买 nike

我正在使用JavaScriptSerializer序列化DateTime,但是当我反序列化它时,它显示比序列化日期少一天的时间:

这是测试:

  DateTime startDate=new DateTime(2012,1,20);//set the 20th of January
JavaScriptSerializer serializer=new JavaScriptSerializer();
string serializeDate= serializer.Serialize(startDate);
DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate);//I get 19th of Jan
Assert.Equals(startDate, afterDeserialize);

首先,我是因为javascript datetime格式而启用它,但是正如我所知道的javascript,Month是零索引 0=January,但是我得到的日期比原始日期少一天。

最佳答案

它不会任意损失一天,它会转换为UTC日期(或者我应该说使用UTC日期格式的日期),因此当它不序列化时,您将不再属于自己的时区。它基本上在执行:

DateTime whateverDate = /* incoming date */;
long ticks = whateverDate.ToUniversalTime() // make UTC
.Subtract(new DateTime(1970, 1, 1)) // subtract UNIX Epoch
.TotalMilliseconds(); // get milliseconds since then
// push in to the "\/Date(ticks)\/" format
String value = String.Format(@"\/Date({0})\/", ticks);

但是,请尝试以下操作:
// or you rely on it serializing, then bring it back to your own local time
// (apply the time zone).
afterDeserialize = afterDeserialize.ToLocalTime();

现在,您可以将UTC时间恢复为本地时间(已应用时区)。

通过测试:
DateTime startDate              = new DateTime(2012,1,20);
JavaScriptSerializer serializer = new JavaScriptSerializer();
String serializeDate = serializer.Serialize(startDate);
DateTime afterDeserialize = serializer.Deserialize<DateTime>(serializeDate)
.ToLocalTime(); // Note: this is added

Assert.Equals(startDate, afterDeserialize); // pass!

关于c#-4.0 - JavaScriptSerializer从日期减去一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003335/

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