我们的客户希望在浏览器中显示日期和时间值,就像它们在数据库中一样,我们将它们作为UTC存储在数据库中.
起初我们在序列化和Javascript方面遇到了一些问题.DateTime值被移动了两次 - 首先匹配机器的本地时区,然后匹配浏览器中的时区.我们通过向JavaScriptSerializer添加自定义转换器来修复它.我们在Serialize覆盖中将DateTime标记为DateTimeKind.Utc.从Serialize中提取数据有点困难,但是我们发现了一些Uri hack,这有助于在相同的JavaScriptSerializer/Date(286769410010)/格式中返回DateTime值,但没有转移到本地时间.在Javascript方面,我们修补了KendoUI JS库来偏移构造的Date()对象,使它们看起来好像是UTC.
然后我们开始在另一方面工作,反序列化.同样,我们必须调整我们的代码以使用自定义stringify而不是JSON.stringify,这会在从本地时间转换为UTC时再次抵消数据.到目前为止,一切似乎都很好.
但看看这个测试:
public void DeserialiseDatesTest()
{
var dateExpected = new DateTime(1979, 2, 2,
2, 10, 10, 10, DateTimeKind.Utc);
// this how the Dates look like after serializing
// anothe issue, unrelated to the core problem, is that the "\" might get stripped out when dates come back from the browser
// so I have to add missing "\" or else Deserialize will break
string s = "\"\\/Date(286769410010)\\/\"";
// this get deserialized to UTC date …Run Code Online (Sandbox Code Playgroud)