Seite 1 von 1
Minuten aus Uhrzeiten berechnen
Verfasst: Dienstag 5. August 2008, 17:20
von troubl6
Hallo!
Bin Anfänger und würde gern aus zwei angegebenen Uhrzeiten (input: 16:30 und 18:30), die Minuten berechnen - also 120 Minuten. Wie könnte das gelöst werden?
Verfasst: Dienstag 5. August 2008, 17:41
von Andyh
Hallo
Code: Alles auswählen
zeit1 = 16.50
zeit2 = 18.50
div = (zeit2 - zeit1) *60
print div
Geht sicher noch besser, aber für den anfang.
Gruß
Andyh
Verfasst: Dienstag 5. August 2008, 17:58
von troubl6
Vielen Dank - es funktioniert - ABER wenn der User im Interface die Stunden und Minuten entsprechende der Konvention mit einem ":" trennt ergibt sich eine Fehlermeldung.

Verfasst: Dienstag 5. August 2008, 18:43
von lunar
Verfasst: Dienstag 5. August 2008, 21:25
von troubl6
Wenn es für einen Anfänger so einfach wäre aus den Hilfe-Docs oder Büchern eine Antwort auf seine Frage zu bekommen, könnte man sich das Forum sparen! Leider helfen mir die 29 Seiten nicht wirklich weiter bei meinem Problem - es liegt sicher an mir

aber wenn man beginnt sich mit dem programmieren zu beschäftigen und bestimmte Probleme für ein Projekt lösen möchte und noch nicht den Durchblick hat sind Meldungen wie Deine mein lieber "LUNAR" ziemlich entbehrlich!
Verfasst: Dienstag 5. August 2008, 21:44
von lunar
Code: Alles auswählen
>>> from datetime import datetime
>>> first_time = datetime.strptime('12:00', '%H:%M')
>>> second_time = datetime.strptime('11:30', '%H:%M')
>>> delta = first_time - second_time
>>> delta.seconds
1800
>>> delta.seconds / 60
30
Verfasst: Dienstag 5. August 2008, 21:53
von troubl6
Vielen Dank - und entschuldige meine vorherige Antwort - aber es erinnerte mich an meine alten Lehrer, die immer meinten "zuerst nachlesen" und dann meist keine weitere Antwort gaben (manche wussten vielleicht auch keine) und v.a. Ihre Erfahrung nicht weitergaben - ich bin ein Frischling was Programmierung betrifft und es ist leider in all den vielen Büchern und online-Hilfen nicht immer einfach Beispiele für anstehende Probleme zu finden.
Verfasst: Dienstag 5. August 2008, 22:21
von yipyip
Hallo troubl6,
hier eine fuer Dich vielleicht angemessenere
Problemloesung:
Code: Alles auswählen
t1 = '16:30'
t2 = '18:20'
def get_minutes(hm_string):
hours, minutes = tuple(map(int, hm_string.split(':')))
return hours * 60 + minutes
mdiff = get_minutes(t2) - get_minutes(t1)
print '%s - %s = %d' % (t2, t1, mdiff)
# etwas einsteigerfreundlicher:
def get_minutes_2(hm_string):
hm_list = hm_string.split(':')
hours = int(hm_list[0])
minutes = int(hm_list[1])
return hours * 60 + minutes
mdiff = get_minutes_2(t2) - get_minutes_2(t1)
print '%s - %s = %d' % (t2, t1, mdiff)
Nur damit du auf den Geschmack kommst...
yipyip
Verfasst: Dienstag 5. August 2008, 22:46
von troubl6
zum Lösungsansatz von Lunar folgende Fehlermeldung:
first_time = datetime.strptime('12:00', '%H:%M')
AttributeError: type object 'datetime.datetime' has no attribute 'strptime'
zur Lösung von yipyip:
man muss nun die Zeit unter " " stellen sonst bekommt man eine Fehlermeldung. Abgesehen von einem Abfangen von Ausnahmen mit try - gibt es eine Lösung die eine unabhängige Usereingabe möglich macht - also egal ob der Dummy vor der Applikation "12:30", 12:30, 12.30 oder 1230 eingibt???
Verfasst: Dienstag 5. August 2008, 22:51
von HWK
Code: Alles auswählen
strptime( date_string, format)
Return a datetime corresponding to date_string, parsed according to format.
This is equivalent to datetime(*(time.strptime(date_string, format)[0:6])).
ValueError is raised if the date_string and format can't be parsed by
time.strptime() or if it returns a value which isn't a time tuple.
New in version 2.5.
=> auf Python 2.5 updaten!
MfG
HWK
Verfasst: Mittwoch 6. August 2008, 05:51
von numerix
troubl6 hat geschrieben: Abgesehen von einem Abfangen von Ausnahmen mit try - gibt es eine Lösung die eine unabhängige Usereingabe möglich macht - also egal ob der Dummy vor der Applikation "12:30", 12:30, 12.30 oder 1230 eingibt???
Sicher. Aber zumindest die letzte Variante wirft Fragen auf:
Kann man sich darauf verlassen, dass der "Dummy" die Stunden und Minutenangaben immer zweistellig eingibt und ggf. mit Nullen auffüllt?
Ansonsten gäbe es z.B. bei 115 ein Problem: 11:05 Uhr oder 1:15 Uhr?
Geht man davon aus, dass er zumindest Minuten auffüllt, dann wäre 115 immer 1:15 Uhr und dann könnte man es auch so machen:
Code: Alles auswählen
t1 = "112"
t2 = "14:03"
def min(t):
t = t.replace(".",":")
if not ":" in t:
t = t[:-2]+":"+t[-2:]
h, min = map(int,t.split(":"))
return h*60+min
print min(t2)-min(t1)
Verfasst: Mittwoch 6. August 2008, 07:48
von mkesper
Wenn er 115 eingibt, sollte das Programm einen Fehler anzeigen, dagegen aber : und . zulassen.
Mal so ganz banal gecodet:
Code: Alles auswählen
hhmm = '18:25'.split(':')
if len(hhmm) < 2:
hhmm = hhmm.split('.')
if len(hhmm) < 2:
print "Bitte eine gültige Uhrzeit eingeben (hh:mm oder hh.mm)."
Verfasst: Mittwoch 6. August 2008, 09:48
von lunar
In diesem Fall wäre
dateutil.parser einen Blick wert.
Verfasst: Mittwoch 6. August 2008, 16:34
von birkenfeld
mkallas hat geschrieben:
Mal so ganz banal gecodet:
Code: Alles auswählen
hhmm = '18:25'.split(':')
if len(hhmm) < 2:
hhmm = hhmm.split('.')
if len(hhmm) < 2:
print "Bitte eine gültige Uhrzeit eingeben (hh:mm oder hh.mm)."
Mal so ganz banal falsch

Verfasst: Mittwoch 6. August 2008, 18:25
von numerix
Verfasst: Mittwoch 6. August 2008, 18:30
von birkenfeld
Eher das:
Code: Alles auswählen
>>> [].split('.')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'split'
Verfasst: Mittwoch 13. August 2008, 11:59
von Y0Gi
Übrigens: Wenn man eine Zeitangabe in Minuten hat und daraus hh:mm machen möchte (analog für mm:ss), ist `divmod` eine schöne Sache:
Code: Alles auswählen
>>> minutes = 133
>>> '%sh %sm' % divmod(minutes, 60)
'2h 13m'