Datums & Tijden in Python Beheersen: Een Praktische Gids
Wat is een Tick?
Tijdintervallen zijn floating-point getallen in seconden. Specifieke momenten in de tijd worden uitgedrukt in seconden sinds 00:00:00 uur, 1 januari 1970 (epoch).
Er is een populaire time module beschikbaar in Python die functies biedt voor het werken met tijden en het converteren tussen representaties. De functie time.time() retourneert de huidige systeemtijd in ticks sinds 00:00:00 uur, 1 januari 1970 (epoch).
Voorbeeld
#!/usr/bin/python import time # Dit is vereist om de time-module te importeren ticks = time.time() print "Aantal ticks sinds 12:00am, 1 januari 1970:", ticks
Dit zou een resultaat produceren zoals:
Aantal ticks sinds 12:00am, 1 januari 1970: 7186862.73399
Datumrekenen is eenvoudig met ticks. Echter, datums vóór de epoch kunnen niet op deze manier worden voorgesteld. Datums in de verre toekomst kunnen ook niet op deze manier worden voorgesteld – het afsnijpunt is ergens in 2038 voor UNIX en Windows.
Wat is een TimeTuple?
Veel van Python's time-functies hanteren tijd als een tuple van 9 getallen, zoals hieronder getoond:
| Index | Veld | Waarden |
|---|---|---|
| 0 | 4-cijferig jaar | 2008 |
| 1 | Maand | 1 tot 12 |
| 2 | Dag | 1 tot 31 |
| 3 | Uur | 0 tot 23 |
| 4 | Minuut | 0 tot 59 |
| 5 | Seconde | 0 tot 61 (60 of 61 zijn leap-seconds) |
| 6 | Dag van de week | 0 tot 6 (0 is maandag) |
| 7 | Dag van het jaar | 1 tot 366 (Julianse dag) |
| 8 | Zomertijd | -1, 0, 1, -1 betekent bibliotheek bepaalt DST |
De bovenstaande tuple is equivalent aan de struct_time structuur. Deze structuur heeft de volgende attributen:
| Index | Attributen | Waarden |
|---|---|---|
| 0 | tm_year | 2008 |
| 1 | tm_mon | 1 tot 12 |
| 2 | tm_mday | 1 tot 31 |
| 3 | tm_hour | 0 tot 23 |
| 4 | tm_min | 0 tot 59 |
| 5 | tm_sec | 0 tot 61 (60 of 61 zijn leap-seconds) |
| 6 | tm_wday | 0 tot 6 (0 is maandag) |
| 7 | tm_yday | 1 tot 366 (Julianse dag) |
| 8 | tm_isdst | -1, 0, 1, -1 betekent bibliotheek bepaalt DST |
Huidige Tijd Ophalen
Om een tijdstip van een seconden sinds de epoch floating-point waarde om te zetten in een time-tuple, geef je de floating-point waarde door aan een functie (bijv. localtime) die een time-tuple retourneert met alle negen items geldig.
#!/usr/bin/python import time localtime = time.localtime(time.time()) print "Lokale huidige tijd:", localtime
Dit produceert het volgende resultaat, dat in elke andere presenteerbare vorm geformatteerd kan worden:
Lokale huidige tijd: time.struct_time(tm_year=2013, tm_mon=7, tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)
Geformatteerde Tijd Ophalen
Je kunt elke tijd formatteren naar wens, maar een eenvoudige methode om tijd in leesbaar formaat te krijgen is asctime():
#!/usr/bin/python import time localtime = time.asctime(time.localtime(time.time())) print "Lokale huidige tijd:", localtime
Dit produceert het volgende resultaat:
Lokale huidige tijd: Tue Jan 13 10:17:09 2009
Kalender voor een Maand Ophalen
De calendar-module biedt een breed scala aan methodes om met jaar- en maandkalenders te werken. Hier printen we een kalender voor een gegeven maand (jan 2008):
#!/usr/bin/python import calendar cal = calendar.month(2008, 1) print "Hier is de kalender:" print cal
Dit produceert het volgende resultaat:
Hier is de kalender: January 2008 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
De time Module
Er is een populaire time module beschikbaar in Python die functies biedt voor het werken met tijden en het converteren tussen representaties. Hier is de lijst met alle beschikbare methodes:
| Nr. | Functie met Beschrijving |
|---|---|
| 1 | time.altzone De offset van de lokale DST-tijdzone, in seconden west van UTC, als gedefinieerd. Negatief als de lokale DST-tijdzone oostelijk van UTC ligt (zoals in West-Europa, inclusief UK). Alleen gebruiken als daylight non-zero is. |
| 2 | time.asctime([tupletime]) Accepteert een time-tuple en retourneert een leesbare 24-karakter string zoals 'Tue Dec 11 18:07:14 2008'. |
| 3 | time.clock() Retourneert de huidige CPU-tijd als floating-point aantal seconden. Om computationele kosten van verschillende benaderingen te meten, is time.clock nuttiger dan time.time(). |
| 4 | time.ctime([secs]) Als asctime(localtime(secs)) en zonder argumenten als asctime(). |
| 5 | time.gmtime([secs]) Accepteert een instant uitgedrukt in seconden sinds de epoch en retourneert een time-tuple t met UTC-tijd. Let op: t.tm_isdst is altijd 0. |
| 6 | time.localtime([secs]) Accepteert een instant in seconden sinds de epoch en retourneert een time-tuple t met lokale tijd (t.tm_isdst is 0 of 1, afhankelijk of DST van toepassing is op instant secs per lokale regels). |
| 7 | time.mktime(tupletime) Accepteert een instant uitgedrukt als time-tuple in lokale tijd en retourneert een floating-point waarde met het instant in seconden sinds de epoch. |
| 8 | time.sleep(secs) Schort de aanroepende thread voor secs seconden. |
| 9 | time.strftime(fmt[,tupletime]) Accepteert een instant als time-tuple in lokale tijd en retourneert een string die het instant vertegenwoordigt zoals gespecificeerd door string fmt. |
| 10 | time.strptime(str, fmt='%a %b %d %H:%M:%S %Y') Parst str volgens formaatstring fmt en retourneert het instant in time-tuple formaat. |
| 11 | time.time() Retourneert het huidige tijdstip, een floating-point aantal seconden sinds de epoch. |
| 12 | time.tzset() Reset de tijdconversieregels gebruikt door de bibliotheekroutines. De omgevingsvariabele TZ specificeert hoe dit gedaan wordt. |
Er zijn twee belangrijke attributen beschikbaar met de time-module:
| Nr. | Attribuut met Beschrijving |
|---|---|
| 1 | time.timezone Attribuut time.timezone is de offset in seconden van de lokale tijdzone (zonder DST) vanaf UTC (>0 in Amerika's; <=0 in meeste van Europa, Azië, Afrika). |
| 2 | time.tzname Attribuut time.tzname is een paar locale-afhankelijke strings, de namen van de lokale tijdzone zonder en met DST, respectievelijk. |
De calendar Module
De calendar-module levert kalender-gerelateerde functies, inclusief functies om een tekstkalender voor een gegeven maand of jaar af te drukken.
Standaard neemt calendar maandag als eerste dag van de week en zondag als laatste. Om dit te wijzigen, roep je calendar.setfirstweekday() aan.
Hier is een lijst met functies beschikbaar in de calendar module:
| Nr. | Functie met Beschrijving |
|---|---|
| 1 | calendar.calendar(year, w=2, l=1, c=6) Retourneert een multiline-string met een kalender voor jaar year geformatteerd in drie kolommen gescheiden door c spaties. w is de breedte in karakters per datum; elke regel heeft lengte 21*w+18+2*c. l is het aantal regels per week. |
| 2 | calendar.firstweekday() Retourneert de huidige instelling voor de weekdag die elke week start. Standaard, wanneer calendar geïmporteerd wordt, is dit 0, betekent maandag. |
| 3 | calendar.isleap(year) Retourneert True als year een schrikkeljaar is; anders False. |
| 4 | calendar.leapdays(y1, y2) Retourneert het totale aantal schrikkeldagen in de jaren binnen range(y1, y2). |
| 5 | calendar.month(year, month, w=2, l=1) Retourneert een multiline-string met een kalender voor maand month van jaar year, één regel per week plus twee header-regels. w is de breedte in karakters per datum; elke regel heeft lengte 7*w+6. l is het aantal regels per week. |
| 6 | calendar.monthcalendar(year, month) Retourneert een lijst van lijsten van ints. Elke sublijst vertegenwoordigt een week. Dagen buiten maand month van jaar year zijn 0; dagen binnen de maand zijn hun dag-van-de-maand, 1 en hoger. |
| 7 | calendar.monthrange(year, month) Retourneert twee integers. De eerste is de code van de weekdag voor de eerste dag van de maand month in jaar year; de tweede is het aantal dagen in de maand. Weekdag-codes zijn 0 (maandag) tot 6 (zondag); maandnummers 1 tot 12. |
| 8 | calendar.prcal(year, w=2, l=1, c=6) Als print calendar.calendar(year, w, l, c). |
| 9 | calendar.prmonth(year, month, w=2, l=1) Als print calendar.month(year, month, w, l). |
| 10 | calendar.setfirstweekday(weekday) Stelt de eerste dag van elke week in op weekdag-code weekday. Weekdag-codes zijn 0 (maandag) tot 6 (zondag). |
| 11 | calendar.timegm(tupletime) De inverse van time.gmtime: accepteert een tijdstip in time-tuple vorm en retourneert hetzelfde instant als floating-point aantal seconden sinds de epoch. |
| 12 | calendar.weekday(year, month, day) Retourneert de weekdag-code voor de gegeven datum. Weekdag-codes zijn 0 (maandag) tot 6 (zondag); maandnummers 1 (januari) tot 12 (december). |
Andere Modules & Functies
Als je geïnteresseerd bent, vind je hier een lijst met andere belangrijke modules en functies om met datum & tijd in Python te werken:
De datetime Module
De pytz Module
De dateutil Module
Python
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python Pass Statement onder de knie krijgen: Een praktische gids
- Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python datetime beheersen: praktische gids voor datums, tijden en tijdzones
- Huidige datum en tijd ophalen in Python: een praktische gids
- Python: Huidige tijd en tijdzonedata eenvoudig ophalen
- Python's time-module beheersen: functies, structs en praktische voorbeelden
- Python's time.sleep() onder de knie krijgen: best practices, multithreading en real-world voorbeelden
- Java Datum en Tijd Onder de Knie: Constructors, Methods & Best Practices