Во-первых, я знаю, что это дубликат, но эти вопросы не то, что я ищу.
Я использую API для добавления участников в онлайн-приложение. Когда я публикую объект JSON в конечной точке, все публикуется, кроме дат. Есть некоторые недоразумения с форматом даты. Если я получу существующих участников и проверю формат даты, то это:
{
"participant":{
"ID":201954,
// Long Object
"DateOfBirth":"\/Date(857305424000-0500)\/",
}
}
Я понял, что первые 9 символов являются метками времени UNIX, но остальные ?? Точно сказать не могу. Есть идеи, что это за формат?
РЕДАКТИРОВАТЬ
Онлайн приложение сделано в .net / asp / c #, не уверен насчет них. Но я пишу свой код в приложении php, которое публикует объект json через cURL
РЕДАКТИРОВАТЬ 2
Я проверил синтаксический анализ неправильных форматов и получил эту ошибку:
Значение «0.48631700 1425319593» не может быть проанализировано как тип
‘Int64’. ‘. Пожалуйста, смотрите InnerException для более подробной информации.
Любая идея, как я могу получить формат .net int64 datetime в php?
Сам 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
Других решений пока нет …