Zeit Differenz 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.
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Zeit Differenz berechnen

Beitragvon limepix » Dienstag 11. November 2008, 17:08

Ein freudiges Hallodri... ich bin neu hier und habe auch noch nicht
allzuviel erfahrung mit python. (programmiere allerdings seit ca 3 jahren in c++ und möchte nun umsteigen ;-) )

mein problem ist eine momentane "denkblockade"
folgendes:

ich möchte eine funktion schreiben, der ich einen Wochentag übergebe(0-6), desweiteren eine uhrzeit(0-24:0-59). diese funktion soll mir nun die zeit in sekunden vom jetzigen zeitpunkt bis zu dieser neuen uhrzeit.
folgendes beispiel:

es ist dienstag 17:00 und ich übergebe meiner funktion (0, 1500) - quasi nächsten montag um 15:00 wie muss der algorithmus aussehen, dass ich die sekunden von "jetzt" bis nächsten mo. 15:00 bekomm??

ich weiss nicht ob es in python möglichkeiten gibt sowas "einfacher" zu machen... in c++ hab ich die offis lib verwendet mit der das ziemlich einfach war und ich mir deswegen bislang keine großen gedanken machen musste...

vielen dank schon mal im vorraus :-)

mein code schaut bis jetzt wie folgt aus:

Code: Alles auswählen

def calcDifToTime(self, nextWDay, nextTime):
        difMin  = 0
        difHour = 0
        difDays = 0
       
        current = time.localtime()
        curWDay  = current[6]
        curHour = current[3]
        curMin  = current[4]       
       
        nextTime = '0' + str(nextTime)
       
        nextMin  = int(nextTime[-2:])
        nextHour = int(nextTime[:-2])
       
        if nextMin < curMin:
            difMin = nextMin + (60 - curMin)
        else:
            difMin = nextMin - curMin
           
        if nextHour < curHour:
            difHour = nextHour + (24 - curHour)
        else:
            difHour = nextHour - curHour
            if (difMin + curMin) >= 60:
                difHour -= 1
           
        if nextWDay < curWDay:
            difDays = nextWDay + (7 - curWDay)
        else:
            difDays = nextWDay - curWDay
            if (difHour + curHour) >= 24:
                difDays -= 1
       
        return (60*difMin) + (60*60*difHour) + (24*60*60*difDays)
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Dienstag 11. November 2008, 17:23

Schau dir mal das datetime Modul an.
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Beitragvon limepix » Dienstag 11. November 2008, 18:32

Wer suchet der findet ...jaja... :oops:
danke schon mal... ich bin jetz zwar nich an nem python fähigen pc, aber sobald ich wieder dran bin probier ichs gleich mal ;-)

das datetime modul bzw allg zeit handling kommt erst 3 kapitel weiter in meinem buch als ich bis jetzt bin ...
da steckt das c++, wo man jeden sche*** selber machen muss dann doch noch zu tief drin ^^

danke nochmal
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 11. November 2008, 18:57

limepix hat geschrieben:das datetime modul bzw allg zeit handling kommt erst 3 kapitel weiter in meinem buch als ich bis jetzt bin ...


Hoffentlich nicht das Galileo Openbook ... :D
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Beitragvon limepix » Dienstag 11. November 2008, 20:32

?!?

:shock:

was ist denn an dem so schlimm??

(falls du mir damit jetz implizit mitteilen wolltest, dass es des auch kostenlos gibt - ich weiss!! ;-) die sache is nur die - ich mach neben meiner normalen tätigkeit als anwendungsentwickler noch ciscos tolle network academy und nach 10 - 11 stunden täglich vorm pc freust du dich dann mal, wenn du das was du lernen musst nich in der leuchtkiste sondern in nem buch findest... so! genug geprahlt... 8) (eigentlich hass ich bücher nämlich...)

falls es andere bücher gibt, die du besser findest, bzw die im anschluss zu dem openbook zu empfehlen sind - ich höre ?!?

ich hab des halt im internet gefunden und dort so ca die ersten 100 seiten gelesen und dachte mir, dass des für umsteiger eigentlich ganz gut is... bis jetzt wurde ich auch absolut nicht enttäuscht ;-)
BlackJack

Beitragvon BlackJack » Dienstag 11. November 2008, 20:41

Das Buch ist von Leuten geschrieben, die wohl Ahnung von C++ haben und dachten sie könnten auf der Grundlage ein Python-Buch schreiben. Schmeiss mal die Forensuche zu dem Thema Openbook an.

IMHO suchst Du kein Buch für den Anschluss an das Buch sondern eines als sofortigen Ersatz.

Das Tutorial in der Dokumentation sollte man mal durch gearbeitet haben. Und "Dive Into Python" ist für Leute mit Programmiererfahrung ganz gut.
Qubit
User
Beiträge: 75
Registriert: Dienstag 7. Oktober 2008, 09:07

Beitragvon Qubit » Dienstag 11. November 2008, 23:13

BlackJack hat geschrieben:IMHO suchst Du kein Buch für den Anschluss an das Buch sondern eines als sofortigen Ersatz.


Warum schreibst du nicht mal eins und zeigst speziell den "Umsteigern" mit OOP Erfahrungen, was Vererbung und Kapselung, Klassen, Instanzen, Konstruktoren, Destruktoren, Setter&Getter, Interfaces, usw., all dieser Kram, den die Leute vor allem an der Uni mit Java eingetrichtert bekommen haben, unter Python bedeutet? Es ist für mich ganz "generisch", dass erst einmal Anschluss an schon bekannte Konzepte gesucht wird ;-)
DasIch
User
Beiträge: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Dienstag 11. November 2008, 23:29

Konstruktoren/Destruktoren - __init__ ist soetwas wie ein Konstruktor(ein richtiger wäre __new__ aber sollte man nicht anfassen es sei denn man weiß was man tut) destruktoren verwendet man so nicht
Setter & Getter - siehe Doku zu property
Interfaces - Überflüssig, Python hat Mehrfachvererbung (und duck typing)
Instanzen - Zahlen, Strings usw. sind z.B. Instanzen von int, str usw. arbeitet man die ganze Zeit mit
Vererbung - "class Foo(object): pass" und schon hat man von object geerbt.
Klassen - "class Foo(object): pass" und schon hat man eine Klasse
Kapselung - Wofür sollte die nützlich sein? Mach einen Unterstrich vor den Namen und dann weiß schon jeder dass man es nicht anfassen sollte

Sonst noch irgendwelche Fragen? :lol:
Qubit
User
Beiträge: 75
Registriert: Dienstag 7. Oktober 2008, 09:07

Beitragvon Qubit » Dienstag 11. November 2008, 23:52

DasIch hat geschrieben:Sonst noch irgendwelche Fragen? :lol:


Hehe..
Was ist das allgemeine Konzept eines "Objekts" in Python?
Und warum ist

class C(A,B):pass

nicht gleich

class C(B,A):pass

;-)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 12. November 2008, 08:47

Qubit hat geschrieben:Warum schreibst du nicht mal eins und zeigst speziell den "Umsteigern" mit OOP Erfahrungen, was Vererbung und Kapselung, Klassen, Instanzen, Konstruktoren, Destruktoren, Setter&Getter, Interfaces, usw., all dieser Kram, den die Leute vor allem an der Uni mit Java eingetrichtert bekommen haben, unter Python bedeutet?

Ich schreibe so eines. Ist bisher allerdings noch in der Planungsphase.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 12. November 2008, 08:49

Qubit hat geschrieben:Und warum ist

class C(A,B):pass

nicht gleich

class C(B,A):pass

Weil die "Lookup"-Reihenfolge von Attributen in Elternklassen sequentiell ist. Schau dir mal die Artikel zum C3 MRO an, dort werden auch noch kompliziertere Fälle behandelt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Beitragvon limepix » Mittwoch 12. November 2008, 09:00

ich will eure tolle diskussion jetz echt nicht unterbrechen... denke auch nicht das ein "5-beitrag" newbie hier an board sagen kann "schluss jetz!", aber ursprünglich ging es hier in diesem thread um die berechnung von einem zeitdelta... wie genau das funktioniert is mir immer noch nicht ganz klar, aber es is früh, viertel vor neun und ich bin wieder in der lage zu "denken", hol mir nen kaffee und in ner stunde werd ich für diejenigen die sich fürs eigentliche thema interessieren eine lösung reinstellen ;-) ...

(trotzdem zu eurer diskussion - ich hab angefangen mit dem programmieren vor ca 6 jahren - seit ca 3 nun oop ...
ich hab des ein oder andere buch gelesen was allgemeine konzepte von oop beschreibt, völlig unabhängig von der verwendeten sprache - das sollte man sich sowieso mal reinziehn um allein des logische verständnis für so etwas zu haben / zu entwickeln... berufsbedingt musste ich dann c++ lernen und hab dazu mehrere bücher gelesen - ich konnte von keinem einzigen sagen, dass man danach c++ "kann". allerdings in der summe und dem dann angesammelten wissen kann man sich so seine eigene "meinung" bilden... das kommt dann schon ganz von selber - wenn du so eine sprache dann jeden tag benutzt, zusätzlich noch code von anderen leuten liest, hast dus dann nach ner bestimmten zeit denk ich mal ganz gut raus...
ich denke auch nicht wie in den anderen threads schon gesagt, dass man ein buch als "schlecht" abstempeln kann - jedoch sollte man zu solch komplexen themen wie "programmierung" sich nicht auf ein einzelnes buch verlassen und das was da drin steht auf biegen und brechen bis an sein lebensende verwenden, sondern grad bei so modernen, sich weiterentwickelnden sprachen wie python sich immer nach "neuem" umschaun und vllt auch das ein oder andere buch "mehr" lesen (bzw. ein hoch aufs internet - es gibt so viel freien code den man im netz findet wo man super ideen herbekommt). ich habe mir das buch gekauft um syntaxmäßig mal bisschen reinzukommen und ein paar ideen zu sammeln(ich wollte wissen wie schaut n FOR oder n WHILE aus... ;-) ))
BlackJack

Beitragvon BlackJack » Mittwoch 12. November 2008, 10:44

Ich denke schon das man ein Buch als schlecht abstempeln kann (übrigens auch ohne selbst ein besseres schreiben zu wollen).

Neben den allgemeinen Konzepten die in vielen Sprachen einer Familie ähnlich bis gleich sind gibt es so etwas wie idiomatische Verwendung, die man nicht einfach von einer Sprache auf eine andere übertragen kann. Genau das tut das OpenBook aber. Gerade C++ Umsteigern sollte man früh nahebringen, das RAII in Python nicht "geht" und das `__del__()` unbrauchbar ist. Da zeigt das OpenBook eine Technik die überhaupt nicht zuverlässig funktioniert und hat dazu keine einzige Warnung. Nicht mal das was in der Python-Dokumentation steht.

Das Buch macht auf mich den Eindruck die Autoren kennen eine statisch typisierte Sprache wie C++, C#, oder Java, haben das Tutorial in der Dokumentation absolviert und dann ein Python-Buch geschrieben. Sie waren jung und brauchten das Geld. ;-)

@limepix: Für einen "Rundgang" durch die Sprache ist das Tutorial in der Python-Dokumentation IMHO ausreichend.
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Beitragvon limepix » Mittwoch 12. November 2008, 12:16

wie gesagt, genau deswegen meine ich, dass man sich nicht nur auf ein buch verlassen soll. ich bin mir sicher das etwaige probleme in anderen büchern angesprochen werden... soweit bin ich nur noch nicht ;-)
klar... theoretisch reicht ne kleine "minireferenz" mit dem ein oder anderen beispiel... vorausgesetzt du hast schon mal programmiert und kein problem mit "anderer" syntax ...

so gut nun mit dem buch hin und her :-) (da gibts andere threads wo sich der ein oder andere mehr noch drüber ausgelasen haben ^^)

zu meinem problem - ich hab´s nun folgendermaßen gelöst:
(verbesserungsvorschläge?? ansonsten bekommens unsre azubis als lösungsbsp für deren aufgabe...)

Code: Alles auswählen

    def calcDifToTime(self, nextDay, nextTime):
        current = time.localtime()
        curWDay  = current[6]
        curHour = current[3]
        curMin  = current[4]
       
        nextTime = '0' + str(nextTime)
       
        nextMin  = int(nextTime[-2:])
        nextHour = int(nextTime[:-2])
       
        difMin = 60 - curMin     
        difHour = 23 - curHour
        difDays = 6 - curWDay
       
        difMin += nextMin
        difHour += nextHour
        difDays += nextDay
       
        difSecs = (60*difMin) + (60*60*difHour) + (24*60*60*difDays)
       
        if difSecs > 604800:
            return difSecs - 604800
        else:
            return difSecs
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 12. November 2008, 14:15

Also bevor du das als Muster-Lösung weitergibst, solltest du wirklich die Module der Stdlib benutzen ... Python = Batteries included

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder