Zahl in Uhrzeit umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo zusammen,

ich mache gerade eine Rechenoperation mit der Zeit.
nun kommt folgendes ergebnis raus: 7.13903233615Uhr
kann mir jemand sagen ob es eine Methode gibt, die das Ergebnis direkt in eine "echte" Uhrzeit umwandelt?

Danke im voraus
BlackJack

@erdmulch: Nicht ohne zu wissen wie Du mit Zeit rechnest und was die Zahl da bedeuten soll.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Im Prinzip müsste es 7Uhr und 6Minuten und ein paar zerquetschte sein :-)
gibt es dafür aber schon ne fertige methode?
BlackJack

@erdmulch: Das 'Uhr' deutet eher auf eine Uhrzeit hin‽ Dafür würde ich ja immer erst einmal das `datetime`-Modul versuchen.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

ja schon, aber wie?
ich erhalte als ergebnis 7,1....
wie kann ich das nun in eine Uhrzeit umwandeln?
deets

7.1 Minuten sind keine Uhrzeit. Wenn ich dir erzaehle, dass Usain Bolt 9.8 Sekunden auf 100m gelaufen ist - dann steckt da nicht drin, ob das Vormittags oder Nachmittags oder tief in der Nacht war.

Ohne das du uns mehr dazu erzaehlst kannst du das nicht. Und fuer's ein bisschen selbst schlau machen: datetime Modul, dort besonders timedelta.
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Du müsstest doch eigentlich nur die Kommazahlen in "Zeit" umrechnen, beispielsweise sind 0.5h = 30 Minuten. Falls du das meinst. Eine "Uhrzeit" ist 7.1h aber nicht, außer du meinst "7:06" Uhr (0.1h = 6min)
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Ok ich hab 7.50Uhr und addiere nun 25min dann soll nicht 7.75Uhr erscheinen sondern 8.15Uhr
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

ah, OK am Besten die Komma zahlen mit split ermitteln? oder gibt es da was eleganteres?
deets

Code: Alles auswählen

from datetime import timedelta, datetime
t = datetime(year=2012, month=6, day=10, hour=7, minute=50)
d = timedelta(minutes=25)
print t + d
Hast du dir das datetime-modul ueberhaupt mal angeschaut?
karolus
User
Beiträge: 140
Registriert: Samstag 22. August 2009, 22:34

Hallo
Hast du dir das datetime-modul ueberhaupt mal angeschaut?
Natürlich nicht - obwohl es ihm hier mehrmals empfohlen wurde :!: :!:

Karo
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

erdmulch hat geschrieben:Ok ich hab 7.50Uhr und addiere nun 25min dann soll nicht 7.75Uhr erscheinen sondern 8.15Uhr
Wenn du nicht durchgängig eine konsistente Nomenklatur verwendest wird das nie was werden. Wie dir schonmal gesagt wurde ist das nicht 7.50 Uhr sondern 7:50 Uhr. Hättest du diese Schreibweise verwendet wäre dir vielleicht auch aufgefallen, dass 7:50 + 0,25 nie im Leben eine sinnvolle Rechenoperation sein kann.

Tipp datetime oder mach dir klar, dass eine Stunde 60 Minuten hat aber eine "Eins" 100 hundertstel (0,01-Einheiten). Den Umrechnungsfaktor erhältst du dann durch Quotientenbildung.

Nachkommastellen erhältst du nicht durch abschneiden sondern durch Restwertbildung (Modulo).

Code: Alles auswählen

7.223423 % 1
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Du kannst auch alle Zeitoperationen in Sekunden ausführen bzw. Deine Zeiten in Sekunden verwalten und dann zur formatierten Ausgabe die time Funktionen verwenden. Etwa so:

Code: Alles auswählen

import time
print time.ctime(450)[11:19]
#oder
print time.strftime("%H:%M:%S",time.localtime(450))
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

ich bins nochmal :-)
und zwar will ich den Sonnenauf und Untergang berechnen. Allerdings kommen da solche zahlen heraus: "7.67"
siehe:
http://lexikon.astronomie.info/zeitgleichung/
kann mir jemand sagen wie man sowas in ne "richtige" Uhrzeit umwandelt?

Danke im voraus
heiliga horsd

Code: Alles auswählen

>>> t = "7.67"
>>> s, m = t.split('.')
>>> Zeit = "{0}:{1} Uhr".format(s, round(int(m)*(3/5)))
>>> print(Zeit)
7:40 Uhr
3/5 wäre hier der Umrechnungsfaktor der Dezimalstelle, drauf kommen tut man mit Überlegen, anhand eines kleinen Rechenbeispiels oder per Dreisatz (oder oder oder)

Gibt aber sicherlich bessere Lösungen der Experten hier, soll nur ein kleiner Denkansatz sein ;)
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

erstmal Danke für die schnelle antwort.
bei mir kommt leider das raus:

Code: Alles auswählen

>>> t = "7.67"
>>> s, m = t.split('.')
>>> Zeit = "{0}:{1} Uhr".format(s, round(int(m)*(3/5)))
>>> print Zeit
7:0.0 Uhr
BlackJack

@erdmulch: Dann Zerlege den Ausdruck mal in Teilausdrücke und schau Dir die jeweiligen Teilergebnisse an. Dann kommst Du darauf wo der Fehler ist.
Benutzeravatar
framp
User
Beiträge: 52
Registriert: Samstag 9. Oktober 2010, 22:16
Wohnort: bei Stuttgart
Kontaktdaten:

erdmulch hat geschrieben:...Allerdings kommen da solche zahlen heraus: "7.67"...
Das Problem ist bei Dir, dass Du die dezimale Zeitdarstellung vorliegen hast. D.h., du hast 7 Stunden (Wert vor dem Punkt) und 0.67 Stunden (nach dem Punkt). Da eine Stunde 60 Minuten hat ist also Deine MinutenZeit 60*0.67 = 40.2 Minuten. Wenn Du noch die 0.2 Minuten in Sekunden umrechnest (60*0.2) bekommst Du 12 Sekunden raus. D.h. also, Deine 7.67 sind 7:40:12 in der SexagesimalDarstellung.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Integer-Division in Python 2.x.

Code: Alles auswählen

>>> 3 / 5
0
>>> 3 / 5.0
0.6
Antworten