0

我将日志作为 JSON 写入文本文件。在文件中,调用对象 LogTime 值为

"1378289277591".
*{"LogTime":"Date(1378290565240)"}*

考虑下面的代码:

Public Class Sync{
  public async Task<CallModel> ConvertCallFileToCallObejct(string path)
        {
            try
            {
                using (var sr = new StreamReader(path))
                {
                    string callText = await sr.ReadToEndAsync();
                    var call = new JavaScriptSerializer().Deserialize<CallModel>(callText);

                    return call;
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
        }
}

我将调用文件转换为调用对象:

var sync = new Sync();
CallModel call = sync.ConvertCallFileToCallObejct(e.FullPath).GetAwaiter().GetResult();

问题是Call.LogTime2013年 9 月 4 日上午 10:29:25但使用 Chrome 控制台和新日期(1378290565240)结果是 2013 年 9 月 4 日下午 14:59:25

问题是什么?

4

3 回答 3

2

试试下面的代码

// JSON received from server is in string format
var jsonString = '{"date":1251877601000}';

//use JSON2 or some JS library to parse the string
var jsonObject =  JSON.parse( jsonString );

//now you have your date!
alert( new Date(jsonObject.date) );
于 2013-09-04T10:42:16.753 回答
1

我不确定您的时区是什么,但我希望它的 UTC 日期时间。

于 2013-09-04T10:37:54.017 回答
1

根据您的个人资料,您居住在伊朗,时区为 UTC+3:30。但是,在 4 月,伊朗使用夏令时,因此实际时区是 UTC+4:30。

这意味着 UTC 时间9/4/2013 10:29:25 AM9/4/2013 14:59:25 PM伊朗当地时间。

根据ECMA 规范,您的 JSON 字符串中给出的时间被视为 UTC 时间,并被反序列化。您可以检查返回的Call.LogTime表达式的返回值DateTimeKind.Utc。因此,您在 C# 代码中看到的是 UTC 时间。

现在,Chrome 也将此时间视为 UTC 时间,但根据您的时区,它似乎将其显示为本地时间。我不是 100% 确定,但我认为 Chrome 在选择如何显示日期时会使用您的首选语言列表,因此请尝试使用它 - 我不知道它到底是做什么的,但我记得在更改语言顺序会影响时间的解释方式。当然,这取决于您究竟要达到什么目标 - IMO,这两个值都是正确的,因为它是同一时间。

于 2013-09-04T11:16:21.030 回答