将Unix时间戳转换为.net int64 datetime

时间:2015-02-28 21:14:20

标签: php .net date unix-timestamp int64

首先,我知道它是重复的,但这些问题并不是我想要的。

我使用API​​在在线应用中添加参与者。当我将JSON对象发布到端点时,除了日期之外都会发布所有内容。对日期格式存在一些误解。如果我找到现有参与者并检查日期格式:

{
   "participant":{  
      "ID":201954,
         //  Long Object
      "DateOfBirth":"\/Date(857305424000-0500)\/",
   }
}

我发现前9个字符是UNIX时间戳,但其余的?不确定。不知道这种格式是什么?

修改 在线申请是在.net / asp / c#中制作的,不确定。但我在php应用程序中编写代码,通过cURL发布json对象

编辑2 我检查了解析错误的格式并得到了这个错误:

  

价值' 0.48631700 1425319593'无法解析为类型   '的Int64'&#39 ;.有关详细信息,请参阅InnerException。

任何想法如何在php中获取.net' int64日期时间的格式?

1 个答案:

答案 0 :(得分:1)

JSON本身does not specify how dates should be formatted,因此您需要了解目标.NET应用程序的要求。最有可能的是convert to a "readable" date format

示例(php):

$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp); 
// outputs 2012-04-06T08:03:59Z

示例(.net):

DateTime d;
DateTime.TryParse("2012-04-06T08:03:59Z", out d); 
// receives 4/6/2012 8:03:59 AM (in US-format)

修改

.NET int64格式是自0001-01-01 00:00:00午夜(每个刻度为1/10000000秒)以来的一些刻度,UNIX时间戳是自UNIX纪元开始以来的秒数(1970- 01-01 01:00:00),所以期望的结果是$ seconds = 621355968000000000/10000000 - $ number_of_seconds,请参阅Convert ticks to unix timestamphttps://kramerc.com/2010/11/30/converting-datetime-ticks-into-a-unix-timestamp-in-php/

因此,对于JSON输出,您应该

$timestamp=1333699439;
$ticks = ($timestamp * 10000000) + 621355968000000000;
// outputs 634692962390000000

测试功能php

function ticks_to_time($ticks) {
    return floor(($ticks - 621355968000000000) / 10000000);
}

$time = ticks_to_time(634692962390000000);
echo date("F j Y g:i:s A T", $time);
// outputs April 6 2012 4:03:59 AM EDT

测试功能.net

Int64 intDate = 634692962390000000; 
DateTime dt = new DateTime(intDate); 
Console.WriteLine(dt.ToString()); 
// outputs 4/6/2012 8:03:59 AM