2013-09-23 16 views
6

Na tej stronie jest wiele pytań wyjaśniających, jak to zrobić. Mój problem, kiedy robię to, co wydaje się działać dla wszystkich innych, nie mam poprawnej daty i czasu. Kod jest ...Konwersja tyknięć na DateTime

long numberOfTicks = Convert.ToInt64(callAttribute); 
startDateTime = new DateTime(numberOfTicks); 

Wartość callAttribute jest = "1379953111"

Po konwersji to wartość numberOfTicks = 1379953111

ale DateTime kończy się startDateTime = {1/1/0001 12:02:17 AM}

Podjęłem tę samą wartość dla kleszczy i przekonwertowałem ją online, a pojawi się poprawna data/czas.

Co robię źle?

+0

Jaką wartość oczekujesz? – Anthony

+0

możliwy duplikat [Jak przekonwertować znacznik czasu UNIX na DateTime i na odwrót?] (Http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa) – Romoku

+0

Jest to liczba kleszczy i nie ma nic wspólnego z sekundami. Data/godzina, której się spodziewam to 9/23/2013 09:18:31. Jeśli wprowadzę liczbę do Konwertera Epok, otrzymam prawidłową datę/czas z powrotem. – Gary

Odpowiedz

17

Twoja wartość nie wydaje się być liczbą kleszczy; Podejrzewam, że jest to UNIX timestamp (ilość sekund od 1970/01/01 UTC)

Oto funkcja konwersji ze znacznikiem czasu UNIX:

static readonly DateTime _unixEpoch = 
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

public static DateTime DateFromTimestamp(long timestamp) 
{ 
    return _unixEpoch.AddSeconds(timestamp); 
} 
+2

Aby uchronić ludzi przed koniecznością sprawdzenia, wartość zapytania '1379953111' zwróci' 9/23/2013 4:18:31 PM', co zdecydowanie wskazuje na to, że jest to właściwa odpowiedź, zakładając, że użytkownik ostatnio używał 'DateTime Teraz lub coś podobnego i prawdopodobnie znajduje się w innej strefie czasowej lub kilka godzin przesuniętych w taki czy inny sposób. – Anthony

+2

Powinieneś określić "rodzaj" epoki Uniksa jako Utc, biorąc pod uwagę, że tak definiowana jest epoka Uniksa. –

+0

@ JonSkeet, dobry punkt; Zaktualizowałem kod. –