2015-06-24 4 views
-2

Я получаю дату и время в следующем формате:DateTime форматирования .Net C#

\/Date(1434013505757-0700)\/ 

Я просто не могу найти способ, чтобы переформатировать его в удобочитаемый формат.

Спасибо заранее,

+2

Попробуйте описать, какой формат это. Где год, день, месяц ... –

+0

Вы * знаете, какая дата/время, которое значение означает * означает? Если да, пожалуйста, поделитесь этой информацией с нами. Если нет, как вы собираетесь оценить, действительно ли какой-либо ответ правильный? –

+0

Как правило, программист несет ответственность за то, чтобы знать источник и формат своих программных входов. Таким образом, вы должны узнать, какой формат. Данные должны прибывать откуда-то из какой-то организации в какую-то организацию. Вам нужно пройти дерево организации до источника данных. В моем опыте. обычно спрашивает. Как и мы, мы можем просто размышлять. – inquisitive

ответ

3

Вы смотрите формат даты 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) всегда избегает символ «/».

1

Это (догадка) UNIX Timestamp с разрешением миллисекунды и часовой пояс.

См. here о том, как конвертировать между двумя. Имейте в виду, что пример основан на «втором» разрешении, но ваш находится в разрешении «MilliSecond». Поэтому используйте AddMilliSeconds.

1434013505757-0700 
|<--------->| |--| 
Unix   TimeZone 
TimeStamp  Offset 

Надеюсь, вы сами сможете выяснить код. Обратите внимание, что смещение часовой пояс находится в часах. Только для справки Unix-Timestamp определяется как количество секунд (или миллисекунд), прошедших с полуночи 1 января 1970 года в Гринвиче.

+0

Это объясняет цифры, см. [Формат проволоки DateTime] (https://msdn.microsoft.com/en-us/library/bb412170 (v = vs.110) .aspx), где «Date» («и дополнительные косые черты» появляются. – rene

+0

Вы правы, хотя также помните, что смещение часового пояса - это дополнительные данные. Временные метки основаны на UTC, независимо от того, какое смещение представлено. немного отличается от других форматов, таких как ISO8601, где уже представленное время * уже отредактировано с помощью этого смещения. Здесь нет. –

Смежные вопросы