Я получаю дату и время в следующем формате:DateTime форматирования .Net C#
\/Date(1434013505757-0700)\/
Я просто не могу найти способ, чтобы переформатировать его в удобочитаемый формат.
Спасибо заранее,
Я получаю дату и время в следующем формате:DateTime форматирования .Net C#
\/Date(1434013505757-0700)\/
Я просто не могу найти способ, чтобы переформатировать его в удобочитаемый формат.
Спасибо заранее,
Вы смотрите формат даты Micoroft, созданный DataContractJsonSerializer.
Следующий пример выводит текущую дату, а затем DateTime из вашего примера:
var ser = new DataContractJsonSerializer(typeof(Example));
var ex = new Example{ MSDate = DateTime.Now};
// write Example to the stream
var ms = new MemoryStream();
ser.WriteObject(ms, ex);
var cnt = Encoding.UTF8.GetString(ms.ToArray());
Debug.WriteLine(cnt); // show wireformat
ms.Position = 0;
var exdes = (Example)ser.ReadObject(ms); // read back
// create our own json stream and deserialize
var somejsonwithdate = @"{""MSDate"":""\/Date(1434013505757-0700)\/""}";
var yourdate = (Example) ser.ReadObject(
new MemoryStream(Encoding.UTF8.GetBytes(somejsonwithdate)));
Debug.WriteLine("{0:yyyy-MM-dd h:mm:ss", yourdate.MSDate);
и вот тип DTO
public class Example
{
public DateTime MSDate { get; set; }
}
Этот код выводит в моем Debug Output:
{"MSDate": "/ Дата (1435128933854 + 0200) /"}
2015-06-11 11:05:05
Из статьи MSDN Stand-Alone JSON Serialization
значения DateTime отображаются как JSON строки в виде "/ Дата (700000 + 0500) /", где первое число (700000 в приведенном примере) является количество миллисекунд в часовом поясе GMT, регулярное (без дневного света) время с полуночи, 1 января 1970 года. Число может быть отрицательным для представления более ранних времен. Часть, которая состоит из «+0500» в примере, является необязательной и указывает, что время относится к локальному виду, то есть должно быть преобразовано в локальный часовой пояс при десериализации. Если он отсутствует, время десериализуется как Utc. Фактическое число («0500» в этом примере) и его знак (+ или -) игнорируются.
JavaScript-код клиента ASP.NET AJAX автоматически преобразует такие строки в экземпляры JavaScript DateTime. Если есть другие строки, которые имеют аналогичную форму, которые не относятся к типу DateTime в .NET, они также преобразуются.
Преобразование происходит только в том случае, если символы «/» экранированы (то есть JSON выглядит как «/ Дата (700000 + 0500) /»), и по этой причине кодер JSON WCF (включенный WebHttpBinding) всегда избегает символ «/».
Это (догадка) UNIX Timestamp с разрешением миллисекунды и часовой пояс.
См. here о том, как конвертировать между двумя. Имейте в виду, что пример основан на «втором» разрешении, но ваш находится в разрешении «MilliSecond». Поэтому используйте AddMilliSeconds.
1434013505757-0700
|<--------->| |--|
Unix TimeZone
TimeStamp Offset
Надеюсь, вы сами сможете выяснить код. Обратите внимание, что смещение часовой пояс находится в часах. Только для справки Unix-Timestamp определяется как количество секунд (или миллисекунд), прошедших с полуночи 1 января 1970 года в Гринвиче.
Это объясняет цифры, см. [Формат проволоки DateTime] (https://msdn.microsoft.com/en-us/library/bb412170 (v = vs.110) .aspx), где «Date» («и дополнительные косые черты» появляются. – rene
Вы правы, хотя также помните, что смещение часового пояса - это дополнительные данные. Временные метки основаны на UTC, независимо от того, какое смещение представлено. немного отличается от других форматов, таких как ISO8601, где уже представленное время * уже отредактировано с помощью этого смещения. Здесь нет. –
Попробуйте описать, какой формат это. Где год, день, месяц ... –
Вы * знаете, какая дата/время, которое значение означает * означает? Если да, пожалуйста, поделитесь этой информацией с нами. Если нет, как вы собираетесь оценить, действительно ли какой-либо ответ правильный? –
Как правило, программист несет ответственность за то, чтобы знать источник и формат своих программных входов. Таким образом, вы должны узнать, какой формат. Данные должны прибывать откуда-то из какой-то организации в какую-то организацию. Вам нужно пройти дерево организации до источника данных. В моем опыте. обычно спрашивает. Как и мы, мы можем просто размышлять. – inquisitive