2014-12-01 3 views
2

Я потребляющих услугу REST, который возвращается Дейта в следующем формате:Преобразование JSON DateTime в C# DateTime

{ 
    "uploadedOn" : "\/Date(1416421811000-0800)\/" 
} 

Пытаясь выяснить, как я могу преобразовать это в C# DateTime. Испытали несколько идей, которые были близки, но не играли в кости. Я подумал, что, возможно, -0800 - это смещение по GMT и анализ значения, исключая это, но это не сработало. Спасибо.

+1

Есть ли у вас какие-либо указания о том, что дата значение в круглых скобках соответствует? –

+0

Да. Это значение, возвращаемое той же службой, что и xml, которая легко анализируется. 2014-11-19T10: 30: 11 – Mike

ответ

4

Что вы получаете назад, выглядит как временная метка Java со смещением -8 часов, что потребует некоторой работы для разбора (к сожалению, ни один из методов парсинга не будет работать из коробки).

Что-то вроде этого (корректировать по мере необходимости) должно работать для вас:

public class Program 
{ 

    public static void Main() 
    { 
     var offsetParsedDate = GetDateTimeOffset("1416421811000-0800"); 

     Console.WriteLine(offsetParsedDate); 

    } 

    static DateTimeOffset GetDateTimeOffset(string inDate) 
    { 
     string delimiter = "-"; 

     if(inDate.IndexOf("+") != -1) 
     { 
      delimiter = "+"; 
     } 

     string[] dateParts = inDate.Split(new string[] { delimiter }, 2, System.StringSplitOptions.None); 

     DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Unspecified); 

     var parsedDate = epoch.AddMilliseconds(Convert.ToDouble(dateParts[0])); 

     var offset = TimeSpan.ParseExact(dateParts[1], "hhmm", null, delimiter == "-" ? System.Globalization.TimeSpanStyles.AssumeNegative : System.Globalization.TimeSpanStyles.None); 

     return new DateTimeOffset(parsedDate, offset);  
    } 
} 
Смежные вопросы