Seite 1 von 1

Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 12:11
von Hartmannsgruber
Servus Forum,

eine ganz einfache Frage.
gibt es eine Möglichkeit, die aktuelle Zeit in eine Variable zu schreiben.
Diese Variable sollte aber nicht die Zeit aufweisen in der Sie "geschaffen" wird,
sondern immer aktuell sein.

Über datetime gibt es ja die Funktion datetime.now()
Ist es z.B. möglich diesen Wert in eine Variable zu schreiben, so das dieser immer
die gerade im Moment aktuelle Zeit beinhaltet?

Die Frage stellt sich, da es immer sehr viel "Tipparbeit" ist, bis man immer
"datetime.now().strftime("%H:%M")" geschrieben hat.

LG
Benjamin

Re: Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 12:32
von ganja
Hallo,
ich bin ein Anfänger aber ich glaube ja.

now = date time.now()
aktuelle_zeit = (now.strftime("%H:%M"))
#so in der art
print (aktuelle_zeit)

Re: Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 13:03
von snafu
Du könntest eine Art Alias erreichen, wenn du einen kurzen Funktionsnamen benutzt:

Code: Alles auswählen

def now():
    return datetime.now().strftime("%H:%M")
Aufgerufen werden muss es aber dennoch, da sich die Zeit sonst nicht aktualisiert.

Re: Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 13:12
von __blackjack__
Wobei ich da schon einen sprechenden Namen verwenden würde, denn bei `now()` erwartet man eigentlich Datum + Uhrzeit und auch eher als `datetime`-Objekt und nicht als Zeichenkette. Also `get_current_time_as_string()`. Ja, das ist auch lang, aber *ein* Name, der ja mit Autovervollständigung schnell eingegeben ist. Aber der Leser weiss dann was er da zu erwarten hat.

Re: Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 17:10
von pillmuncher
Was __blackjack__ gesagt hat.

Bitte nicht nachmachen:

Code: Alles auswählen

#!/usr/bin/env python3
# coding: utf-8

def _install_my_magic_module():

    import sys
    import datetime

    from importlib.abc import MetaPathFinder, Loader
    from importlib.machinery import ModuleSpec
    from types import ModuleType

    class MyMagicModule(ModuleType):
        __all__ = ['now']
        __file__ = None
        now = property(lambda _: datetime.datetime.now())

    class MyMagicImporter(MetaPathFinder, Loader):

        def find_spec(self, fullname, path=None, target=None):
            if fullname == 'my_magic_module':
                return ModuleSpec(fullname, self)

        def create_module(self, spec):
            return sys.modules.setdefault(spec.name, MyMagicModule(spec.name))

        def exec_module(self, module):
            pass

    sys.meta_path.insert(0, MyMagicImporter())

_install_my_magic_module()

def main():
    import time
    import my_magic_module
    print(my_magic_module.now)
    time.sleep(1)
    print(my_magic_module.now)
    time.sleep(1)
    print(my_magic_module.now)
    time.sleep(1)
    print(my_magic_module.now)
    time.sleep(1)
    print(my_magic_module.now)

if __name__ == '__main__':
    main()
Ergebnis:

Code: Alles auswählen

2020-08-15 18:06:12.168319
2020-08-15 18:06:13.169441
2020-08-15 18:06:14.170622
2020-08-15 18:06:15.171900
2020-08-15 18:06:16.173183

Re: Variable mit aktueller Tageszeit

Verfasst: Samstag 15. August 2020, 18:35
von Sirius3
@pillmuncher: dann hast Du aber keine Variable, sondern ein Property, das immer über ein Objekt angesprochen werden muß.

Besser wäre eine Klasse mit __str__-Methode:

Code: Alles auswählen

from datetime import datetime as DateTime
class CurrentTime:
    def __str__(self):
        return f"{DateTime.now():%H:%M}"

current_time = CurrentTime()
print(current_time)
jetzt = f"Jetzt ist {current_time}Uhr"
Verhält sich wie ein Objekt, das wenn man es in einen String umwandelt, die aktuelle Uhrzeit ergibt.

Re: Variable mit aktueller Tageszeit

Verfasst: Montag 17. August 2020, 14:47
von DeaD_EyE
Das coole ist, dass das datetime Objekt auch die Format-Methode unterstützt, wie sie bereits von Sirius3 gezeigt worden ist.

Die Abkürzungen sind hier zu finden:
https://docs.python.org/3/library/datet ... e-behavior

Ich finde den Methodenaufruf DateTime.now() besser.
Erklärung: Im Hintergrund wird ein Syscall ausgelöst und die Ausgabe ändert sich jedes Mal. Das erwartet man eher von Funktionen und Methoden mit Seiteneffekt.