Minuten aus Uhrzeiten berechnen

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
troubl6
User
Beiträge: 5
Registriert: Dienstag 5. August 2008, 17:07
Wohnort: Wien

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?
Andyh
User
Beiträge: 319
Registriert: Dienstag 8. Januar 2008, 19:52
Kontaktdaten:

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
Meinen Dickschädel schon bemerkt?
Ich bin jetzt FACHARBEITER (Zerspanungsmechaniker)!!!
[code]import sys

if sys.platform == "win32":
print "this program only runs on operating systems!!!"
sys.TotalError()[/code]
troubl6
User
Beiträge: 5
Registriert: Dienstag 5. August 2008, 17:07
Wohnort: Wien

Vielen Dank - es funktioniert - ABER wenn der User im Interface die Stunden und Minuten entsprechende der Konvention mit einem ":" trennt ergibt sich eine Fehlermeldung. :D
troubl6
User
Beiträge: 5
Registriert: Dienstag 5. August 2008, 17:07
Wohnort: Wien

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 :roll: 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!
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
troubl6
User
Beiträge: 5
Registriert: Dienstag 5. August 2008, 17:07
Wohnort: Wien

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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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...
:wink:
yipyip
troubl6
User
Beiträge: 5
Registriert: Dienstag 5. August 2008, 17:07
Wohnort: Wien

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???
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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)."
lunar

In diesem Fall wäre dateutil.parser einen Blick wert.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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 :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Meinst du das?

Code: Alles auswählen

>>> len(":".split(":"))
2
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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'
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Ü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'
Antworten