J'ai essayé de résumer la bibliothèque qui gère la date et l'heure en Python dans un style inversé.
Le contenu de cet article a été rédigé avec soin, mais ne constitue pas une information officielle. Veuillez vous référer à la référence officielle (référence # 1) pour des informations précises.
La plupart concernent des modules standard, donc si vous êtes nouveau dans Python ou si vous n'êtes pas familier avec la bibliothèque de date et d'heure. (Parce que je suis encore nouveau sur Python.)
Python2 a été confirmé avec la v2.7.10 et Python3 a été confirmé avec la v3.5.1. (La version Anaconda 4.0.0 Windows 64 bits est utilisée.)
Ceux qui ne traitent pas de Python 2 et Python 3 séparément peuvent être utilisés en commun.
Dans ce cas, print
est unifié avec des parenthèses et le résultat de l'exécution est Python3.
L'exemple de code affiche principalement les résultats dans un environnement interactif.
Les versions des modules d'extension sont les suivantes.
dateutil 2.5.1
pytz 2016.2
Une brève description des modules de date et d'heure standard et des types qu'ils contiennent. Pour plus de détails, reportez-vous à la référence officielle (document de référence # 1).
Dans le texte, «from datetime import *» est appliqué sauf indication contraire.
module | La description |
---|---|
datetime module |
Fournit des types et des opérations standard pour les dates et les heures. |
time module |
Contient des utilitaires de temps de bas niveau (au niveau du système). |
calendar module |
Il comprend principalement des utilitaires liés aux calendriers texte. |
module | La description |
---|---|
dateutil |
Un module qui compense le traitement de la date et de l'heure qui manque au module standard. |
pytz |
Un module qui gère les fuseaux horaires. Les détails seront décrits plus tard. |
Moule | La description |
---|---|
datetime.date |
Objet de date. |
datetime.datetime |
Objet de date et d'heure. |
datetime.time |
Objet de temps.time A ne pas confondre avec les modules. |
datetime.timedelta |
Un objet qui représente la différence entre deux dates et heures. |
datetime.tzinfo |
Classe de base abstraite pour les informations de fuseau horaire. |
datetime.timezone |
Implémentation avec décalage fixe des informations de fuseau horaire. |
time.struct_time |
UNIXstruct tm Taple nommé équivalent à (structure). |
La hiérarchie des types du module «datetime» est la suivante.
timezone
dans Python 3.2 ou moins.object
timedelta
tzinfo
timezone
time
date
datetime
Par la suite, le nom du module du type est omis dans le texte.
Certains des mêmes objets «datetime» ont un fuseau horaire et d'autres pas.
En Python, datetime
avec un fuseau horaire est appelé ** aware ** (date et heure), et datetime
sans fuseau horaire est appelé ** naïf ** (date et heure).
L'objet «date» peut toujours être naïf et l'objet «time» peut être l'un ou l'autre.
L'objet timezone
ajouté dans Python 3.2 est disponible comme instance du fuseau horaire ( tzinfo
).
Avant cela, l'implémentation tzinfo
n'existait pas dans le module standard.
Dans de tels cas, utilisez le module pytz
.
L'implémentation tzinfo
a également un sous-module tz
du module dateutil
.
De plus, si vous souhaitez indiquer le fuseau horaire avec une valeur de décalage arbitraire (+09: 00 pour JST), timezone
est suffisant, mais
Le module pytz
est recommandé si vous devez gérer la rigueur du fuseau horaire.
Le module pytz
fait référence à la base de données de fuseaux horaires IANA (base de données Olson).
Pour plus de détails, reportez-vous à la référence officielle (document de référence # 1).
Pour la base de données des fuseaux horaires IANA, reportez-vous aux articles suivants.
tz database - Wikipedia https://ja.wikipedia.org/wiki/Tz_database
La méthode de conversion entre naïf et conscient est expliquée dans ce volume.
Il peut être généré par le constructeur. L'objet «time» est omis.
>>> from datetime import datetime, date, timezone, timedelta
>>>
>>> datetime(2016, 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Required argument 'day' (pos 3) not found
>>> datetime(2016, 7, 5)
datetime.datetime(2016, 7, 5, 0, 0)
>>> datetime(2016, 7, 5, 13)
datetime.datetime(2016, 7, 5, 13, 0)
>>> datetime(2016, 7, 5, 13, 45)
datetime.datetime(2016, 7, 5, 13, 45)
>>> datetime(2016, 7, 5, 13, 45, 27)
datetime.datetime(2016, 7, 5, 13, 45, 27)
>>> datetime(2016, 7, 5, 13, 45, 27, 123456)
datetime.datetime(2016, 7, 5, 13, 45, 27, 123456)
>>> datetime(2016, 7, 5, 13, 45, 27, 123456, timezone(timedelta(hours=+9)))
datetime.datetime(2016, 7, 5, 13, 45, 27, 123456, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))
>>>
>>> date(2016, 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Required argument 'day' (pos 3) not found
>>> date(2016, 7, 5)
datetime.date(2016, 7, 5)
>>> date(2016, 7, 5, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: function takes at most 3 arguments (4 given)
Le septième élément de «datetime» correspond aux microsecondes (1/1 000 000 secondes).
Il peut également être généré à partir d'un horodatage. Voir la section suivante pour l'horodatage de la date et de l'heure actuelles.
>>> datetime.fromtimestamp(12345678901.234567)
datetime.datetime(2361, 3, 22, 4, 15, 1, 234568)
>>> date.fromtimestamp(12345678901.234567)
datetime.date(2361, 3, 22)
L'horodatage (float) est ici une valeur appelée ** heure UNIX ** ou secondes d'époque.
UNIX Time-Wikipedia https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93
L'heure UNIX est une valeur entière, mais sur Python, elle est représentée par float
.
Les valeurs après la virgule décimale sont traitées comme des microsecondes en Python, mais comme vous pouvez le voir dans l'exemple, elles sont représentées par la partie fractionnaire de float
, donc la précision est réduite.
Avec la méthode datetime.date ()
, vous ne pouvez récupérer que la partie date en tant que date
.
>>> from datetime import datetime, date
>>>
>>> dt = datetime.now()
>>> dt
datetime.datetime(2016, 7, 14, 14, 24, 46, 157000)
>>> dt.date()
datetime.date(2016, 7, 14)
datetime.now ()
renvoie un objet datetime
qui indique la date et l'heure actuelles.
date.today ()
renvoie un objet date
qui indique le jour actuel.
>>> from datetime import datetime, date
>>>
>>> datetime.now()
datetime.datetime(2016, 7, 14, 14, 14, 2, 900000)
>>> date.today()
datetime.date(2016, 7, 14)
Vous pouvez obtenir l'horodatage de la date et de l'heure actuelles avec la fonction time ()
du module time
.
Pour l'horodatage, reportez-vous à la section précédente.
>>> import time
>>>
>>> time.time()
1468473337.565 # 2016-07-14 14:15:37.565000
Il y a d'autres fonctions (à l'ancienne) qui renvoient struct_time
dans le module time
, mais je ne les couvrirai pas cette fois.
Veuillez lire l'explication sur la fonction time.gmtime ()
.
Le module datetime
utilise la fonction datetime.strptime ()
.
Cependant, comme vous pouvez le voir à partir des résultats ci-dessous, cette fonction est inflexible.
>>> from datetime import datetime, timezone, timedelta
>>> datetime.strptime("2016/07/05 13:45:06", "%Y/%m/%d %H:%M:%S")
datetime.datetime(2016, 7, 5, 13, 45, 6)
>>> datetime.strptime("2016/07/05 13:45", "%Y/%m/%d %H:%M:%S")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...\lib\_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "...\lib\_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2016/07/05 13:45' does not match format '%Y/%m/%d %H:%M:%S'
(* Le contenu de la trace est partiellement traité.)
La fonction parse ()
du sous-module parser
du module dateutil
est puissante, alors utilisons-la.
>>> from dateutil.parser import parse
>>>
>>> parse("Tue Aug 23 17:00:35 JST 2016")
datetime.datetime(2016, 8, 23, 17, 0, 35)
>>> parse("2016-07-03T11:22:33Z")
datetime.datetime(2016, 7, 3, 11, 22, 33, tzinfo=tzutc())
>>> parse("2016/07/03 04:05:06")
datetime.datetime(2016, 7, 3, 4, 5, 6)
>>> parse("2016/07/03")
datetime.datetime(2016, 7, 3, 0, 0)
Dans le cas de Python2, l'erreur suivante s'est produite.
.../dateutil/parser.py:598: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif res.tzname and res.tzname in time.tzname:
Cela semble être lié au problème décrit dans cet ↓ article, mais cela se produit même si la version de dateutil
est 2.5.1.
Est-ce un bogue similaire mais différent (non corrigé)?
twitter - python dateutil unicode warning - Stack Overflow http://stackoverflow.com/questions/21296475/python-dateutil-unicode-warning
Pour convertir au format ISO8601, utilisez la méthode date.isoformat ()
.
Ceci est utilisé lors de la simple conversion d'un objet datetime
ou date
en une chaîne.
Si vous souhaitez le convertir en chaîne dans n'importe quel format, utilisez la méthode strftime ()
.
>>> from datetime import datetime, timezone, timedelta
>>>
>>> dt1 = datetime(2016, 7, 5, 13, 45) # naive
>>> dt2 = datetime(2016, 7, 5, 13, 45, tzinfo=timezone(timedelta(hours=+9))) # aware
>>> d = dt1.date()
>>> dt1, dt2, d
(datetime.datetime(2016, 7, 5, 13, 45), datetime.datetime(2016, 7, 5, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(0, 32400))), datetime.date(2016, 7, 5))
>>>
>>> dt1.isoformat()
'2016-07-05T13:45:00'
>>> str(dt1)
'2016-07-05 13:45:00'
>>>
>>> dt2.isoformat()
'2016-07-05T13:45:00+09:00'
>>> str(dt2)
'2016-07-05 13:45:00+09:00'
>>>
>>> d.isoformat()
'2016-07-05'
>>> str(d)
'2016-07-05'
>>>
>>> dt1.strftime("%Y/%m/%d %H:%M:%S")
'2016/07/05 13:45:00'
>>> dt1.strftime("%Y/%m/%d %H:%M:%S %Z %z")
'2016/07/05 13:45:00 '
>>> dt2.strftime("%Y/%m/%d %H:%M:%S %Z %z")
'2016/07/05 13:45:00 UTC+09:00 +0900'
Veuillez vous référer à la référence ci-dessous pour le format du format.
8.1.8. Comportement de strftime () et strptime () --8.1. Datetime - Types de date et d'heure de base - Documentation Python 3.5.1 http://docs.python.jp/3.5/library/datetime.html#strftime-strptime-behavior
Les comparaisons sont possibles avec les opérateurs de comparaison ==
, ! =
, <
, <=
, >
, > =
.
Vous ne pouvez pas comparer «datetime» et «date».
(TypeError: can't compare datetime.datetime to datetime.date
)
De plus, «datetime» ne peut pas être comparé entre conscient et naïf.
(TypeError: can't compare offset-naive and offset-aware datetimes
)
Vous devez les faire correspondre à l'un ou l'autre type avant de comparer.
>>> from datetime import datetime, date
>>>
>>> dt1 = datetime(2016, 7, 1, 22, 30)
>>> dt2 = datetime(2016, 7, 5, 13, 45)
>>>
>>> dt1 == datetime(2016, 7, 1, 22, 30, 0)
True
>>> dt1 == dt1, dt1 == dt2, dt1 != dt1, dt1 != dt2, dt1 < dt2, dt1 > dt2, dt1 <= dt1, dt2 <= dt1, dt2 >= dt2, dt1 >= dt2
(True, False, False, True, True, False, True, False, True, False)
>>>
>>> d1 = dt1.date()
>>> d2 = dt2.date()
>>>
>>> d1 == date(2016, 7, 1)
True
>>> d1 == d1, d1 == d2, d1 != d1, d1 != d2, d1 < d2, d1 > d2, d1 <= d1, d2 <= d1, d2 >= d2, d1 >= d2
(True, False, False, True, True, False, True, False, True, False)
En Python, les intervalles de date et d'heure et les différences sont représentés par des objets timedelta
.
(«Delta» signifie différence (différence ⇒ Δ).)
«timedelta» peut être obtenu en soustrayant «datetime» ou «date» (opération «-»).
Il ne peut pas être calculé avec «datetime» et «date».
(TypeError: unsupported operand type(s) for -
)
De plus, «datetime» ne peut pas être calculé entre conscient et naïf.
(TypeError: can't subtract offset-naive and offset-aware datetimes
)
Vous devez le faire correspondre à l'un ou l'autre type avant de calculer.
>>> from datetime import datetime, date
>>>
>>> d1, d2 = date(2016, 7, 1), date(2016, 7, 3)
>>>
>>> type(d2 - d1)
<class 'datetime.timedelta'>
>>> d2 - d1
datetime.timedelta(2)
>>> str(d2 - d1)
'2 days, 0:00:00'
>>> str(d1 - d2)
'-2 days, 0:00:00'
>>>
>>> dt1, dt2 = datetime(2016, 7, 1, 10, 30), datetime(2016, 7, 3, 9, 10)
>>> dt2 - dt1
datetime.timedelta(1, 81600)
>>> str(dt2 - dt1)
'1 day, 22:40:00'
Comme mentionné dans la section précédente, la différence entre les deux dates est le nombre de jours retournés. Et si je veux savoir "quel mois est l'intervalle entre deux dates"?
Dans ce cas, essayez d'utiliser le sous-module relativedelta
du module dateutil
.
Fondamentalement, cela devrait le résoudre.
>>> from datetime import date
>>> from dateutil.relativedelta import relativedelta
>>>
>>> d1, d2 = date(2014, 11, 22), date(2016, 3, 1)
>>> str(d2 - d1)
'465 days, 0:00:00'
>>> delta = relativedelta(d2, d1)
>>> delta
relativedelta(years=+1, months=+3, days=+8)
>>> month_count = delta.years * 12 + delta.months
>>> month_count
15
Ce sera des «années» pour 12 mois ou plus, mais j'ai pu calculer le nombre de mois avec «années * 12 + mois».
Ce qui est un peu inquiétant ici, c'est le calcul impliquant la fin du mois, surtout vers février de l'année humide. J'ai donc décalé les deux dates d'un jour et vérifié ce que serait le delta dans ce cas.
relativedelta
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta
d1 = date(2016, 2, 26)
d2 = date(2016, 3, 26)
delta1day = timedelta(days=1)
for x in range(9):
print(d1, d2, relativedelta(d2, d1))
d1 += delta1day
d2 += delta1day
2016-02-26 2016-03-26 relativedelta(months=+1)
2016-02-27 2016-03-27 relativedelta(months=+1)
2016-02-28 2016-03-28 relativedelta(months=+1)
2016-02-29 2016-03-29 relativedelta(months=+1)
2016-03-01 2016-03-30 relativedelta(days=+29)
2016-03-02 2016-03-31 relativedelta(days=+29)
2016-03-03 2016-04-01 relativedelta(days=+29)
2016-03-04 2016-04-02 relativedelta(days=+29)
2016-03-05 2016-04-03 relativedelta(days=+29)
J'ai regardé les dates plus loin, mais grosso modo, il semble qu'elles ne soient traitées spécialement que lorsqu'elles traversent fin février. A part ça, le nombre de jours est le même (+29).
Lorsque j'augmentais d'un jour l'intervalle entre les deux dates, le nombre de jours changeait selon qu'il chevauchait ou non la fin du 30e mois. Je suis sûr que cela sera corrigé le dernier jour du mois.
Il semble que ce soit bien si vous comprenez la nature de cette zone.
J'ai déjà écrit que datetime --datetime
et date --date
deviennent timedelta
,
Pour l'augmentation / la diminution de la date / date, vous pouvez obtenir l'augmentation / diminution de «datetime» et de «date» en ajoutant / en soustrayant «timedelta».
>>> from datetime import datetime, date, timedelta
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>> d = dt.date()
>>>
>>> dt + timedelta(days=5, minutes=168)
datetime.datetime(2016, 7, 10, 16, 33)
>>> d - timedelta(days=13)
datetime.date(2016, 6, 22)
Pour ajuster sur une base mensuelle, utilisez le sous-module «relativedelta» du module «dateutil», comme dans le cas du calcul du nombre de mois.
>>> from datetime import date
>>> from dateutil.relativedelta import relativedelta
>>>
>>> date(2016, 7, 5) - relativedelta(months=32)
datetime.date(2013, 11, 5)
L'exemple suivant confirme la conversion mutuelle entre naïf et conscient en Python3 avec uniquement le module standard.
Il n'y a pas de type timezone
dans Python2 (inférieur à Python3.2 pour être exact), alors utilisez plutôt le module pytz
.
Pour changer une «datetime» naïve en une «datetime» consciente, utilisez la méthode «datetime.replace ()».
>>> from datetime import datetime, timezone, timedelta
>>>
>>> jst = timezone(timedelta(hours=+9)) #Lors de l'utilisation de pytz pytz.timezone('Asia/Tokyo')
>>> jst
datetime.timezone(datetime.timedelta(0, 32400))
>>> dt = datetime(2016, 7, 5, 13, 45) # naive
>>> dt
datetime.datetime(2016, 7, 5, 13, 45)
>>> dt2 = dt.replace(tzinfo=jst) # aware
>>> dt2
datetime.datetime(2016, 7, 5, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))
>>> str(dt2)
'2016-07-05 13:45:00+09:00'
Selon la référence # 4-2, il a été signalé que lorsqu'un fuseau horaire était ajouté par la méthode datetime.replace ()
, il se comportait un peu étrangement.
Une alternative est montrée pour utiliser jst.localize (datetime (...))
.
Je ne l'ai pas reproduit dans mon environnement, donc c'est peut-être un bogue dans une ancienne version de pytz
.
Inversement, pour changer une «datetime» consciente en une «datetime» naïve, utilisez la même méthode «datetime.replace ()». Pour le fuseau horaire, spécifiez «Aucun» qui signifie «aucun».
#(Suite d'en haut)
>>> dt3 = dt2.replace(tzinfo=None)
>>> dt3
datetime.datetime(2016, 7, 5, 13, 45)
>>> str(dt3)
'2016-07-05 13:45:00'
struct_time
en datetime
ou date
Le type d'horodatage est parfois représenté par struct_time
, mais si vous voulez le convertir en type datetime
.
En utilisant les fonctions time.mktime ()
et datetime.fromtimestamp ()
,
struct_time
→timestamp(float)
→datetime
Convertissez dans l'ordre de.
>>> from datetime import datetime, date
>>> from time import localtime, mktime
>>>
>>> tm = localtime() # struct_time
>>> t = mktime(tm) #Horodatage(float)Conversion en
>>> datetime.fromtimestamp(t)
datetime.datetime(2016, 7, 12, 22, 31, 15)
>>> date.fromtimestamp(t)
datetime.date(2016, 7, 12)
Profitant du fait que struct_time
est un tuple, vous pouvez également écrire:
#(Suite d'en haut)
>>> datetime(*tm[:6])
datetime.datetime(2016, 7, 12, 22, 31, 15)
tm [: 6]
donne une taple d'année, de mois, de jour, d'heure, de minute et de seconde, donc nous la passons au constructeur de datetime
comme six arguments.
C'est succinct, mais cela réduit la lisibilité et peut être évité.
datetime
ou date
en struct_time
Contrairement à la section précédente, si vous souhaitez convertir un objet datetime
ou un objetdate
en un objet struct_time
,
Vous pouvez obtenir struct_time
en utilisant la méthode date.timetuple ()
.
>>> from datetime import datetime
>>>
>>> dt = datetime(2016, 7, 3, 12, 25)
>>> d = dt.date()
>>>
>>> dt.timetuple()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=3, tm_hour=12, tm_min=25, tm_sec=0, tm_wday=6, tm_yday=185, tm_isdst=-1)
>>> d.timetuple()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=185, tm_isdst=-1)
Seul l'exemple de date est écrit ici. Dans le cas de la date et de l'heure, l'une ou l'autre méthode doit être applicable en changeant le type et l'unité.
Pour générer une liste de dates finie, j'ai rapidement trouvé un moyen de combiner timedelta
et range
pour créer une liste en notation d'inclusion.
>>> from datetime import date, timedelta
>>>
>>> start_date = date(2016, 7, 5)
>>> a = [start_date + timedelta(days=x) for x in range(5)]
>>> a
[datetime.date(2016, 7, 5), datetime.date(2016, 7, 6), datetime.date(2016, 7, 7), datetime.date(2016, 7, 8), datetime.date(2016, 7, 9)]
... mais je suis un peu déçu de ne pas pouvoir écrire en une seule ligne.
(Vous pouvez écrire date (2016, 7, 5)
directement au lieu de start_date
, mais bien sûr ce n'est pas le cas.)
Vous pouvez écrire sur une ligne en utilisant le sous-module rrule
du module dateutil
.
>>> from datetime import date
>>> from dateutil.rrule import rrule, DAILY
>>>
>>> a = [x.date() for x in rrule(DAILY, count=5, dtstart=date(2016, 7, 5))]
>>> a
[datetime.date(2016, 7, 5), datetime.date(2016, 7, 6), datetime.date(2016, 7, 7), datetime.date(2016, 7, 8), datetime.date(2016, 7, 9)]
Oh oui, je voulais écrire comme ça.
Dans certains cas, il peut être plus pratique d'utiliser le module Pandas (pandas.date_range
).
Voir la référence # 5 pour plus de détails.
Utilisez la fonction «saut» du module «calendrier».
>>> import calendar
>>>
>>> calendar.isleap(2016)
True
>>> calendar.isleap(2015)
False
>>>
>>> from datetime import date
>>>
>>> d = date(2016, 7, 5)
>>> calendar.isleap(d.year)
True
datetime
Depuis Python 3.5, tous les objets liés à datetime dans le module datetime
sont évalués comme True
, sauf pour l'équivalent detimedelta (0)
.
(Timezone
n'a pas été mentionné dans le document, il n'est donc pas inclus dans" Tous ".)
>>> from datetime import *
>>>
>>> bool(datetime.fromtimestamp(0))
True
>>> bool(date.fromtimestamp(0))
True
>>> bool(time(0, 0, 0))
True
>>> bool(timedelta(1))
True
>>> bool(timedelta(0))
False
>>> bool(timezone.utc)
True
D'ailleurs, dans Python2, l'objet time
à minuit est évalué comme False
.
>>> from datetime import *
>>> bool(time(0, 0, 0))
False
Il s'agit d'un bogue (Issue13936) qui existait dans moins de Python3.5 plutôt que Python2, et est le comportement corrigé dans Python3.5. Quand je l'ai vérifié avec Python 3.4.3, c'était toujours "False".
Cette méthode est également utilisée dans d'autres langues, mais elle est calculée par (Horodatage après traitement - Horodatage avant traitement).
import time
t = time.time()
time.sleep(3.1)
print(time.time() - t)
# => 3.0999999046325684
Bien que cela ne soit pas couvert cette fois, vous pouvez également utiliser les modules suivants pour mesurer le temps d'exécution des fragments de code.
27.5.timeit - Minutage de petits extraits de code - Documentation Python 3.5.1 http://docs.python.jp/3.5/library/timeit.html
C'est une image lorsque chaque objet est sérialisé par «pickle».
>>> from datetime import datetime
>>> import pickle
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>>
>>> pickle.dumps(dt) # datetime
"cdatetime\ndatetime\np0\n(S'\\x07\\xe0\\x07\\x05\\r-\\x00\\x00\\x00\\x00'\np1\ntp2\nRp3\n."
>>> pickle.dumps(dt.date()) # date
"cdatetime\ndate\np0\n(S'\\x07\\xe0\\x07\\x05'\np1\ntp2\nRp3\n."
>>> pickle.dumps(dt.timetuple()) # struct_time
'ctime\nstruct_time\np0\n((I2016\nI7\nI5\nI13\nI45\nI0\nI1\nI187\nI-1\ntp1\n(dp2\ntp3\nRp4\n.'
>>> pickle.dumps(dt - dt) # timedelta
'cdatetime\ntimedelta\np0\n(I0\nI0\nI0\ntp1\nRp2\n.'
>>> from datetime import datetime
>>> import pickle
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>> pickle.dumps(dt) # datetime
b'\x80\x03cdatetime\ndatetime\nq\x00C\n\x07\xe0\x07\x05\r-\x00\x00\x00\x00q\x01\x85q\x02Rq\x03.'
>>> pickle.dumps(dt.date()) # date
b'\x80\x03cdatetime\ndate\nq\x00C\x04\x07\xe0\x07\x05q\x01\x85q\x02Rq\x03.'
>>> pickle.dumps(dt.timetuple()) # struct_time
b'\x80\x03ctime\nstruct_time\nq\x00(M\xe0\x07K\x07K\x05K\rK-K\x00K\x01K\xbbJ\xff\xff\xff\xfftq\x01}q\x02(X\x07\x00\x00\x00tm_zoneq\x03NX\t\x00\x00\x00tm_gmtoffq\x04Nu\x86q\x05Rq\x06.'
>>> pickle.dumps(dt - dt) # timedelta
b'\x80\x03cdatetime\ntimedelta\nq\x00K\x00K\x00K\x00\x87q\x01Rq\x02.'
#1. (Document officiel / référence de la bibliothèque standard)
8.1.Dateetime - Types de date et d'heure de base - Documentation Python 3.5.1 http://docs.python.jp/3.5/library/datetime.html#module-datetime 8.1.Dateetime - Types de date et d'heure de base - Documentation Python 2.7.x http://docs.python.jp/2/library/datetime.html#module-datetime
(Les liens pour les modules autres que datetime
sont redondants et seront omis. Il y a un lien quelque part sur la page de liens ci-dessus, veuillez donc sauter à partir de là.)
#2. dateutil - powerful extensions to datetime — dateutil 2.5.3 documentation https://dateutil.readthedocs.io/en/stable/
#3. pytz 2016.4 : Python Package Index https://pypi.python.org/pypi/pytz/
#4-1. Traitement de la date Python et TimeZone | Nekoya Press http://nekoya.github.io/blog/2013/06/21/python-datetime/
#4-2. N'utilisez pas replace pour donner tzinfo à datetime en Python | Nekoya Press http://nekoya.github.io/blog/2013/07/05/python-datetime-with-jst/
#5. Manipulez facilement les données relatives à la date et à l'heure avec les pandas Python --StatsFragments http://sinhrks.hatenablog.com/entry/2014/11/09/183603
Recommended Posts