Mam timedelta. Chcę dni, godziny i minuty od tego - albo jako krotka albo słownik ... Nie jestem zdenerwowany.
Przez lata musiałem to robić kilkanaście razy w kilkunastu językach, ale Python zazwyczaj ma prostą odpowiedź na wszystko, więc pomyślałem, że zapytam tutaj, zanim wypiszę mdłą, prostą (ale pełną słów) matematykę.
Pan Fooz podnosi dobrą rację.
Mam do czynienia z „aukcjami” (trochę jak aukcje w serwisie eBay), w których każdy ma czas trwania. Staram się znaleźć pozostały czaswhen_added + duration - now
Czy mam rację mówiąc, że to nie wyjaśnia DST? Jeśli nie, jaki jest najprostszy sposób dodawania / odejmowania godziny?
timedelta
obiektu „datetime.timedelta (sekundy = 1177)” : po prostu użyj str ()Odpowiedzi:
Jeśli masz
datetime.timedelta
wartośćtd
,td.days
już daje ci „dni”, które chcesz.timedelta
wartości zachowują ułamek dnia w sekundach (nie bezpośrednio w godzinach lub minutach), więc rzeczywiście będziesz musiał wykonać „mdląco prostą matematykę”, np .:źródło
td
jest ujemne,-1 // 3600
jest-1
.//
jest używany zamiast/
do uzyskania liczby całkowitej, a nie liczby zmiennoprzecinkowej.//
jest operatorem podziału podłogi: „podział, który daje wynik w postaci liczby całkowitej dostosowanej do lewej strony w linii liczbowej”, patrz tutaj .jcrs
wskazano,-1//3600
jest-1
, więc dlaczego nie użyćint(td.seconds/3600)
zamiast tego, aby zmienić-1
sekundę w0
godziny zamiast1
godziny wstecz?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
a następnieseconds = x.seconds - hours*3600 - minutes*60
Jest to nieco bardziej kompaktowe, godziny, minuty i sekundy są wyświetlane w dwóch wierszach.
źródło
td.days
jest niezerowy. Trzebahours += td.days*24
. Jeśli chcesz wziąć pod uwagę ułamki sekundy (OP nie);seconds += td.microseconds / 1e6
może być użyty.Jeśli chodzi o czas letni, myślę, że najlepszą rzeczą jest konwersja obu
datetime
obiektów na sekundy. W ten sposób system oblicza dla Ciebie czas letni.źródło
mktime()
może się nie powieść, jeśli lokalna strefa czasowa może mieć różne przesunięcie utc w różnym czasie (wielu tak robi) - możesz użyćpytz
modułu, aby uzyskać dostęp do bazy danych tz w przenośny, determinacyjny sposób. Czas lokalny może być również niejednoznaczny (50% szans na błąd) - potrzebujesz dodatkowych informacji, aby ujednoznacznić, np. Często (nie zawsze) daty w pliku dziennika są monotonne . Zobacz Jak mogę odjąć dzień od daty pytona? które mogą mieć do czynienia z podobnymi problemami.Nie rozumiem
co powiesz na to
Dostajesz minuty i sekundy minuty jako liczba zmiennoprzecinkowa.
źródło
Użyłem następujących:
źródło
timedeltas ma atrybut
days
iseconds
. Możesz z łatwością je przekonwertować.źródło