Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换为C#和#x27;s FileTimeUTC编号到Javascript中的日期_Javascript_Date_Date Conversion - Fatal编程技术网

转换为C#和#x27;s FileTimeUTC编号到Javascript中的日期

转换为C#和#x27;s FileTimeUTC编号到Javascript中的日期,javascript,date,date-conversion,Javascript,Date,Date Conversion,我正在使用UTC字符串(13045938529947000),我需要将其转换为Javascript格式的东西,如2014年5月5日星期四15:17:00 对此,任何帮助都将不胜感激 谢谢 RFD将字符串转换为数字,数字从微秒到毫秒,并基于UTC时间创建JS日期对象: var st = "130459385299470000"; var dt = new Date(parseInt(st, 10) / 1000); 将字符串转换为数字,从微秒到毫秒,并基于UTC时间创建JS日期对象: var s

我正在使用UTC字符串(13045938529947000),我需要将其转换为Javascript格式的东西,如2014年5月5日星期四15:17:00

对此,任何帮助都将不胜感激

谢谢


RFD

将字符串转换为数字,数字从微秒到毫秒,并基于UTC时间创建JS日期对象:

var st = "130459385299470000";
var dt = new Date(parseInt(st, 10) / 1000);

将字符串转换为数字,从微秒到毫秒,并基于UTC时间创建JS日期对象:

var st = "130459385299470000";
var dt = new Date(parseInt(st, 10) / 1000);

您将不得不面对一些差异:

  • Windows文件时间使用1601年1月1日的纪元。JavaScript
    Date
    使用1970年1月1日。您需要相应地调整该值

  • Windows文件时间使用“刻度”,每个刻度为100纳秒。JavaScript
    Date
    使用毫秒。因此,存在精度损失

  • Windows文件时间可能不代表UTC。它可能表示某个本地时区中的时间。您必须了解源上下文,才能知道该值是否实际为UTC。如果不是,那么你必须调整它

  • JavaScript
    Date
    基于UTC,但会根据运行代码的机器的本地时区呈现其输出。这通常是最终用户的web浏览器。如果需要,可以使用类似于将其渲染为UTC的库

  • 由于所有JavaScript数字都是IEEE浮点数,当您开始使用如此大的值时,可能会出现舍入错误。这可以通过截断字符串而不是分割来避免

    var s = "130459385299470000";
    var t = +s.substring(0, s.length-4);
    var e = Date.UTC(1601,0,1);
    var dt = new Date(e + t);
    

当然,更好的做法是首先将其转换为C代码中的ISO8601时间戳,而不是传递文件时间。

有一些差异需要解决:

  • Windows文件时间使用1601年1月1日的纪元。JavaScript
    Date
    使用1970年1月1日。您需要相应地调整该值

  • Windows文件时间使用“刻度”,每个刻度为100纳秒。JavaScript
    Date
    使用毫秒。因此,存在精度损失

  • Windows文件时间可能不代表UTC。它可能表示某个本地时区中的时间。您必须了解源上下文,才能知道该值是否实际为UTC。如果不是,那么你必须调整它

  • JavaScript
    Date
    基于UTC,但会根据运行代码的机器的本地时区呈现其输出。这通常是最终用户的web浏览器。如果需要,可以使用类似于将其渲染为UTC的库

  • 由于所有JavaScript数字都是IEEE浮点数,当您开始使用如此大的值时,可能会出现舍入错误。这可以通过截断字符串而不是分割来避免

    var s = "130459385299470000";
    var t = +s.substring(0, s.length-4);
    var e = Date.UTC(1601,0,1);
    var dt = new Date(e + t);
    

当然,更好的做法是首先在C代码中将其转换为ISO8601时间戳,而不是传递文件时间。

您尝试做什么?除非你展示你的作品,否则我们无法修复任何东西。你试图做什么?除非你展示你的作品,否则我们无法修复任何东西。