【问题标题】:Convert Unix Timestamp to .net int64 datetime将 Unix 时间戳转换为 .net int64 日期时间
【发布时间】:2015-02-28 21:14:20
【问题描述】:

首先,我知道它是重复的,但这些问题不是我要找的。​​p>

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

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

我发现前 9 个字符是 UNIX 时间戳,但其余的?没有把握。知道这是什么格式吗?

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

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

无法将值“0.48631700 1425319593”解析为类型 'Int64'。'。有关详细信息,请参阅 InnerException。

知道如何在 php 中获取 .net 的 int64 日期时间的格式吗?

【问题讨论】:

  • 一年后投反对票?严重地?有什么原因,谁做了?

标签: php .net date unix-timestamp int64


【解决方案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

【讨论】:

  • 感谢您,但我无权访问 .net 应用程序。我将尝试通过 json post 给出“Y-m-d\TH:i:s\Z”格式并检查是否有效。
  • 我检查过,它响应错误。说“值 ''2012-04-06T08:03:59Z'' 不能被解析为类型 'Int64'”。我用谷歌搜索,但找不到如何在 int64 中获取时间
  • 既然您现在知道日期应该是一个 int64 值,您需要按照更新后的答案所示进行转换。
  • 感谢 smirnov 的回答,我有一些非常紧急的工作。所以,甚至不能测试这个。明天会检查。对此,我真的非常感激。非常非常非常感谢。
猜你喜欢
  • 2020-10-19
  • 2015-02-09
  • 1970-01-01
  • 2014-03-31
  • 2020-12-23
  • 2016-04-24
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多