Преобразование временной метки Unix в дату и время .net int64

Прежде всего, я знаю, что это дубликат, но эти вопросы не то, что я ищу.

Я использую API для добавления участников в онлайн-приложение. Когда я отправляю объект JSON в конечную точку, публикуется все, кроме дат. Есть некоторое недоразумение с форматом даты. Если я получу существующих участников и проверю формат даты, это:

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

Я понял, что первые 9 символов - это временная метка UNIX, но остальные ?? не уверена. Есть идеи, что это за формат?

EDIT Онлайн-приложение сделано в .net/asp/c#, не уверен в них. Но я пишу свой код в приложении php, которое публикует объект json через cURL.

EDIT 2 Я проверил синтаксический анализ неправильных форматов и получил эту ошибку:

Значение «0,48631700 1425319593» не может быть проанализировано как тип «Int64». Пожалуйста, смотрите InnerException для более подробной информации.

Любая идея, как я могу получить формат даты и времени .net int64 в php?


person Rizwan    schedule 28.02.2015    source источник
comment
Понизить голос через год? серьезно? Любая причина, почему и кто это сделал?   -  person Rizwan    schedule 24.06.2016


Ответы (1)


Сам JSON не указывает, как следует форматировать даты, поэтому вам необходимо знать требования целевого приложения .NET. Скорее всего, имеет смысл преобразовать в "читаемый" формат даты

Пример (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, см. Преобразование тиков в отметку времени unix и https://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
person user2316116    schedule 01.03.2015
comment
Спасибо за это, но у меня нет доступа к приложению .net. Я попробую указать формат Y-m-d\TH:i:s\Z через сообщение json и проверить, работает ли это. - person Rizwan; 02.03.2015
comment
Я проверил, и он отвечает с ошибкой. Высказывание Значение «2012-04-06T08:03:59Z» не может быть проанализировано как тип «Int64». Я гуглил, но не смог найти, как получить время в int64 - person Rizwan; 02.03.2015
comment
Поскольку теперь вы знаете, что дата ожидается как значение int64, вам нужно преобразовать ее, как показано в обновленном ответе. - person user2316116; 03.03.2015
comment
Спасибо за ответ, smirnov, у меня очень срочная работа. Так что даже проверить это нельзя. Завтра проверю. Я очень ценю это. Очень очень большое спасибо. - person Rizwan; 03.03.2015