2011-03-05 28 views
10

Potrzebuję konwertować DateTime na uniksowy znacznik czasu. Więc googled to patrząc na niektóre przykładowy kodDlaczego DateTime do czasu Unix używa podwójne zamiast liczby całkowitej?

w niemal wszystkich wynikach widzę, używają double jako zwrotu dla takiej funkcji, nawet jeśli jawnie przy użyciu floor przekonwertować go na liczbę całkowitą. Uniksowe znaczniki czasu są zawsze liczbami całkowitymi. Więc jaki jest problem z używaniem long lub int zamiast podwójnego?

static double ConvertToUnixTimestamp(DateTime date) 
{ 
    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); 
    TimeSpan diff = date - origin; 
    return Math.Floor(diff.TotalSeconds); 
} 
+0

IMHO nie po to, aby potwierdzić datę wprowadzenia. Powinien zwrócić długą lub ad-hoc struct – onof

+1

Nie ma powodu, jest to po prostu zgniło kod. Rzucony na długi, nie może się przepełnić. –

+0

Dodam, że z definicji czasomierz uniksowy to UTC. Metoda powinna sprawdzić, czy DateTime.Kind jest UTC, lokalny lub nieokreślony. Minimum, jeśli Local I przekonwertowałbym na UTC przed wykonaniem konwersji. Opcjonalnie, jeśli chcesz uniksowego znacznika czasu, który jest lokalny, możesz dodać przeciążenie lub parametr, aby nie przeprowadzić konwersji na UTC. – Nate

Odpowiedz

3

Zwykle implementowałbym go z długością bez znaku, zamiast wymagać od użytkownika zaokrąglania w górę lub w dół i rzutowania na int lub długi. Jednym z powodów, dla których ktoś może chcieć podwójnego, jest użycie struktury podobnej do timeval, takiej jak w gettimeofday. Pozwala na dokładność pod sekundę ...

3

Aby uniknąć błędu 2038 w systemach 32-bitowych?

+7

Można by pomyśleć, że mogliby po prostu użyć długo. – nos

1

Podwajasz więcej ziemi niż jakiejkolwiek innej zmiennej typu int.

+0

tak, ale "długi" obejmowałby tysiące lat. Z pewnością moje oprogramowanie nie będzie działać przez kilka tysięcy lat. – Earlz

+0

Przypuszczam, że jeśli masz jakieś oprogramowanie, które musi obliczyć eony w przyszłość lub przeszłość, może to pomóc. Jest to jednak szczególny przypadek i prawdopodobnie użyjemy niestandardowego typu danych w tym scenariuszu. – Nate

-1

To nie jest kwestia "lat". ale godzin na rozsądnej maszynie, odpowiednio połączonych.

Ale czy można sobie wyobrazić zestawienie ogromnego magazynu? Mam około 30 TB danych i bagno mnie - spędzam więcej czasu na katalogowaniu niż na prawdziwej pracy.

Życzymy powodzenia w Twoich wysiłkach.

Powiązane problemy