2013-04-10 16 views
10

To pytanie nie jest duplikatem, to pytanie demonstruje problem z metodą konwersji, a nie jak przeprowadzić konwersję. Przeczytaj całe pytanie.Konwersja epoki/unixa do Datetime

Mam znacznika czasu, które uważam, że jest to czas, znaczek Unix, gdy stosując następujący przelicznik poprawnie konwertuje stempel

Wartość: 1365151714493

http://www.epochconverter.com/

Szukałem wokół i znalezione example, w jaki sposób przekonwertować to do obiektu datetime i metoda wydaje się prosta, utworzyć obiekt datetime i ustawić datę na noc może na 1/1/1970 i dodać wartość jako sekundę:

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0).AddSeconds(Convert.ToDouble(unixTimeStamp)); 
} 

Problem jest za każdym razem, gdy nazywam ten mehod wartością powyżej, otrzymuję wyjątek poza zakresem.

Czy muszę najpierw zrobić cokolwiek z wartością? ciąg przekształca się w podwójne ok. jest wyjątek podczas wywoływania AddSeconds(double) Methos

+0

Jestem pewien, że znacznik czasu jest w milisekundach, _nie_ sekund. EDYCJA: Chyba, że ​​... wiesz ... w przyszłości ma to oznaczać datę 43 259 lat. –

+0

Jak to jest duplikatem ???? podany link jest pytaniem, jak wykonać konwersję. Pytam o problem przy próbie wykonania konwersji! –

Odpowiedz

14

tego znacznika czasu (1365151714493) w milisekundach, nie sekund. Musisz podzielić go przez 1000 lub użyć AddMilliseconds zamiast tego. Jeśli jest to traktowane jako sekundy, to data około 43 259 (przybliżone obliczenie) lat w przyszłości. To jest poza zakresem DateTime, który maxes out w roku 10000, rzucając w ten sposób ArgumentOutOfRangeException.

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(unixTimeStamp)); 
} 

Możesz również rozważyć zmusić go do GMT zgodnie z sugestią V4Vendetta. Ponadto, jeśli spodziewasz się mieć mieszankę formatów (kilka sekund LUB milisekund), być może szybkie sprawdzenie wielkości analizowanej wartości może być rozważne.

+0

Całkowicie przeoczyłem możliwość, że wartość wynosi milisekundy, ponieważ każdy przeczytany artykuł podał przykłady znacznika czasu w sekundach. Zakładałem, że wartość podana mi była taka sama. Dzięki –

5

Chyba powinieneś spróbować go jako gdyż jest w stosunku do GMT

także ze strony wspomniałeś zakłada, że ​​wartość jest w milisekundach, a nie tradycyjny unix timestamp as in seconds

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
epoch = epoch.AddMilliseconds(yourvalue);// your case results to 4/5/2013 8:48:34 AM