Référence d'inversion de bibliothèque de date / heure Python

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.

Lecteur supposé

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.)

supposition

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

Informations de base sur l'API

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 standard

module La description
datetimemodule Fournit des types et des opérations standard pour les dates et les heures.
timemodule Contient des utilitaires de temps de bas niveau (au niveau du système).
calendarmodule Il comprend principalement des utilitaires liés aux calendriers texte.

Module d'extension

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

Moule La description
datetime.date Objet de date.
datetime.datetime Objet de date et d'heure.
datetime.time Objet de temps.timeA 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 tmTaple nommé équivalent à (structure).

La hiérarchie des types du module «datetime» est la suivante.

object
    timedelta
    tzinfo
        timezone
    time
    date
        datetime

Par la suite, le nom du module du type est omis dans le texte.

naïf et conscient (avec ou sans fuseau horaire)

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.

Créez un objet de n'importe quelle date et heure

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)

Créer un objet avec la date et l'heure actuelles

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 ().

Convertir de la chaîne de caractères en date / heure / date

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

Convertir date / heure / date en chaîne de caractères

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

Comparez deux dates et heures

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)

Calculez l'intervalle entre deux dates et heures

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'

Calculez le nombre de mois pour deux dates et heures

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.

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.

Augmentation / diminution de la date / date

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)

Conversion mutuelle entre naïf et conscient

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'

Convertit 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_timetimestamp(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é.

Convertir 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)

Générer une liste de dates / dates

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.

Jugement de l'année de la stagnation

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

Evaluation booléenne des objets appartenant au module 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".

Calcul du temps de traitement

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

appendice

Échantillon de série

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.'

Matériel de référence

#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

Référence d'inversion de bibliothèque de date / heure Python
Référence inversée Sympy
Référence inversée Luigi
Traitement asynchrone en Python: référence inverse asyncio
Bibliothèque de messagerie Python 3.6
Pytest à traction inversée
Premier Python
Arithmétique des dates Python
Bibliothèque Python AST
mesure du temps python
Premier Python
Note sur la bibliothèque Python
À propos de la référence Python
Page de référence Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Extraire "date actuelle uniquement" et "date et heure actuelles" avec python datetime.
Convertir le fuseau horaire de la date (décalage horaire) avec Python (à partir de la chaîne)
Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires
Temps d'exécution de la fonction (Python)
bibliothèque de commerce d'algorithmes python
Mémo inversé Pandas
Manipulation de date en Python
Question sur la série chronologique Python
Installer une bibliothèque externe pour python
Sortie du temps d'exécution de python
[Python2] Chaîne de date → UnixTime → Chaîne de date
Fonction de plancher de temps (Python)
Bibliothèque d'optimisation Python Pulp
[Python3] Obtenez la différence de date
Obtenir la date en Python
Calculer la date avec python
Obtenez date avec python
[Python] Fractionner la date
Inverser les chaînes en Python
Calculer les dates en Python
python Obtenir l'heure actuelle
[Python] Créer une liste de dates et d'heures pour une période spécifiée
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Reverse pull Numpy / Pandas (sera mis à jour à tout moment)