Hey,
ich würde gerne mit meinem RaspberryPi die aktuelle Zeit und das Datum ausgeben lassen und zwar in dem Format: dd.mm.yyyy hh:mm:ss . Aber habe dazu nichts gefunden was das mich weiter gebracht hat. Es ist übrigens keine Hausaufgabe sondern soll für einen Wecker dienen.
Gruß
RaspberryPi datetime + format
@Tim747
Eigentlich hast Du Dir die Antwort bereits in den Threadtitel getippt...
mutetella
Eigentlich hast Du Dir die Antwort bereits in den Threadtitel getippt...
Code: Alles auswählen
>>> import datetime
>>> print '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())
09.03.2014 19:39:11
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Braucht es dazu nicht irgend ein Display?
Vielleicht gibst Du dazu mal ein paar Details!
Vielleicht gibst Du dazu mal ein paar Details!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
ja ich brauche ein Display. momentan greife ich auf den Pi per ssh zu will aber später das ganze über ein LCD Display ausgeben. Darüber hinaus soll zu einer angegebenen Weckzeit Musik abspielen. Neben bei könnte mir noch jemand sagen wie ich mit der Weckzeit vergleichen kann.
Code: Alles auswählen
print '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())
In der Python-Dokumentation stehen alle Details, die man dazu wissen muss!
http://docs.python.org/2/library/dateti ... e.datetime
http://docs.python.org/2/library/dateti ... e.datetime
Die ``print`` Anweisung schickt einen String an ``sys.stdout``. Da gibt es nichts, das Du vergleichen könntest.Tim 747 hat geschrieben:Neben bei könnte mir noch jemand sagen wie ichmit der Weckzeit vergleichen kann.Code: Alles auswählen
print '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())
Die `format`-Methode liefert Dir einen String. Diesen könntest Du mit einem anderen String vergleichen, was aber in Deinem Fall schnell zu unerwarteten Ergebnissen führen kann. Würdest Du zwei Zeiten (`datetime.datetime` Objekte) zuerst in einen String umwandeln und dann diese beiden Strings miteinander vergleichen, wäre das ungefähr so, als würde man aus der Zahl 10 erstmal einen String '10' machen, um diesen dann mit einem anderen String '9' zu vergleichen.
Code: Alles auswählen
>>> str(10) == str(9)
False
Code: Alles auswählen
>>> str(10) > str(9)
False
Code: Alles auswählen
>>> '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime(2014, 3, 10, 8, 45)) == '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime(2014, 3, 10, 8, 45))
True
>>> '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime(2014, 3, 10, 8, 45)) == '{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime(2014, 3, 10, 8, 45))
False
Code: Alles auswählen
>>> datetime.datetime(2014, 3, 10, 8, 45) == datetime.datetime(2014, 3, 10, 8, 45)
True
Innerhalb derselben Schleife kannst Du dann z. B. auch die Uhrzeit ausgeben lassen.
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Für den ganz einfachen Vergleich wäre es vielleicht sinnvoll, intern mit Unixzeit zu arbeiten. Das ist einfach eine Gleitkommazahl mit Sekunden ab 1.1.1970. Im Moment ist z.B. ungefähr 1394445313.2579913.
Die kannst du dann ganz einfach mit > vergleichen:
Dann müsstest du bei der Eingabe der Zeit so früh wie möglich in Unixzeit wandeln und bei der Ausgabe so spät wie möglich. Intern dann immer mit der Unixzeit arbeiten. So kannst du z.B. sehr einfach addieren (einfach „time.time() + 3600“ um eine Stunde später zu erhalten) oder auch mit Differenzen arbeiten. Vergleiche halt ganz einfach mit > bzw. <.
Die kannst du dann ganz einfach mit > vergleichen:
Code: Alles auswählen
#!/usr/bin/env python3
import time
weckzeit = 1394449003.5862668
if time.time() > weckzeit:
print("Aufstehen!")
das mit dem wecker finde ich viel leichter und nutze das auch so:
mit mpd hast du einen konsolegesteuerten musikplayer, den du bequem auch von anderen rechnern steuern kannst (zb mit gmpc) oder aber auch sehr bequem vom smartphone.
mit cronjobs unter linux kannst du dann wöchentliche aufgaben für den raspberrypi erstellen. bsplweise dass er jeden montag um 07.00 uhr 'mpc play && mpc volume 100' ausführen soll, was die musik starten würde und die lautstärke voll aufdreht.
so benutze ich das auch
mit mpd hast du einen konsolegesteuerten musikplayer, den du bequem auch von anderen rechnern steuern kannst (zb mit gmpc) oder aber auch sehr bequem vom smartphone.
mit cronjobs unter linux kannst du dann wöchentliche aufgaben für den raspberrypi erstellen. bsplweise dass er jeden montag um 07.00 uhr 'mpc play && mpc volume 100' ausführen soll, was die musik starten würde und die lautstärke voll aufdreht.
so benutze ich das auch
@Hellstorm: Die Unix-Zeit kann kein Mensch lesen und sagen wie spät es ist, während die Werte von `datetime`-Objekten in Zeichenketten umgewandelt sehr leicht für Menschen verständlich sind, und auch problemlos mit ``>`` oder ähnlichen Vergleichoperationen verglichen werden können. Man kann dort auch viel einfacher den Wochentag ermitteln und das Datum von der Zeit trennen, denn üblicherweise will man ja bei einem Wecker nicht für jedes Wecken das Datum neu festlegen sondern hat eher so Angaben wie Montag soll er um 8 Uhr morgends klingeln. Drück das mal in Code mit Sekunden seit Epoch aus und vergleich den Quelltext mit welchem der `datetime` verwendet.
@xamiax
Die Tatsache, dass `Tim 747` seine Frage hier gestellt hat, lässt vermuten, dass er an einer Lösung mit Python arbeitet...
Die Tatsache, dass `Tim 747` seine Frage hier gestellt hat, lässt vermuten, dass er an einer Lösung mit Python arbeitet...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
ganz genau und danke für die vielen lösungs wege. ich habe zwar gestern bereits diese Seite zugeschickt bekommen: http://docs.python.org/2/library/dateti ... e.datetime wollte mich allerdings erst heute damit befassen z.B. wußte ich noch gar nicht, dass manmutetella hat geschrieben:@xamiax
Die Tatsache, dass `Tim 747` seine Frage hier gestellt hat, lässt vermuten, dass er an einer Lösung mit Python arbeitet...
Code: Alles auswählen
datetime.datetime(2014, 3, 10, 8, 45)
genauch so wollte ich es machen.Dann erstellst Du eine Schleife, innerhalb derer in einem bestimmten Interval (je nachdem, wie genau Du das haben möchtest) der Rückgabewert von `datetime.datetime.now()` mit Deiner Weckzeit verglichen wird. Hast Du eine Übereinstimmung, geht der Alarm los.
Innerhalb derselben Schleife kannst Du dann z. B. auch die Uhrzeit ausgeben lassen.
momentan sieht mein Script so aus:
könnte mir jemand weiter helfen ,weil der Alarm nicht ausgelöst wird :K
Code: Alles auswählen
#!/usr/bin/python3
# coding=UTF-8
import datetime
import pyxine
import time
import os
clear = lambda: os.system('clear')
while True:
print('{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now()))
if datetime.datetime.now() == datetime.datetime(2014, 3, 10, 17, 55, 0, 0):
Xine = pyxine.Xine()
stream = xine.stream_new()
stream.open('/home/pi/python/track.mp3')
stream.play()
time.sleep(160)
time.sleep(0.9)
clear()
Das kann nicht funktionieren, da die Zeiten niemals (bzw. nur sehr selten) identisch sind. Du musst daher testen, ob die angezielte Zeit überschritten wurde.
Code: Alles auswählen
last_time = datetime.datetime.now()
while True:
now = datetime.datetime.now()
if last_time < target_time <= now:
#hier dein Ereignis
...
last_time = now
Das Leben ist wie ein Tennisball.
@Tim 747: Es ist einfach extrem unwahrscheinlich das die beiden Objekte den gleichen Wert haben. Die `now()`-Methode müsste auf die Mikrosekunde genau zu dem Zeitpunkt des Wertes des anderen Objekts aufgerufen werden:
Du müsstest also das Ergebnis von dem `now()`-Aufruf noch von den Sekunden und Mikrosekunden befreien. Das kann man mit der `replace()`-Methode machen.
Beim Vergleichswert muss man die Sekunden und Mikrosekunden übrigens nicht explizit angeben. Der Default-Wert für diese Argumente ist bereits 0.
`Xine` würde nach den üblichen Konventionen übrigens klein geschrieben, denn es ist kein Datentyp.
Code: Alles auswählen
In [1]: import datetime
In [2]: datetime.datetime.resolution
Out[2]: datetime.timedelta(0, 0, 1)
In [3]: datetime.datetime.resolution.microseconds
Out[3]: 1
Beim Vergleichswert muss man die Sekunden und Mikrosekunden übrigens nicht explizit angeben. Der Default-Wert für diese Argumente ist bereits 0.
`Xine` würde nach den üblichen Konventionen übrigens klein geschrieben, denn es ist kein Datentyp.