Maison  >  Article  >  développement back-end  >  Modules date-heure et date Python

Modules date-heure et date Python

Y2J
Y2Joriginal
2017-05-09 14:15:461456parcourir

Cet article présente principalement le module de traitement de date et d'heure (date et datetime) de Python. L'éditeur pense qu'il est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Venez jeter un œil avec l'éditeur

Avant-propos

Dans le travail de développement, nous avons souvent besoin d'utiliser la date et l'heure, telles que :

  • Sortie en tant que contenu des informations du journal

  • Calculer le temps d'exécution d'une certaine fonction

  • Utiliser date Nommer un fichier journal

  • Enregistrer ou afficher l'heure de publication ou de modification d'un article

  • Autres

Python fournit plusieurs modules intégrés pour fonctionner sur les dates et les heures : module d'heure, module datetime et module calendrier. Le module time est implémenté en appelant la bibliothèque C, donc certaines méthodes peuvent ne pas être appelées sur certaines plates-formes, mais la plupart des interfaces qu'il fournit sont fondamentalement cohérentes avec la bibliothèque standard C time.h. Par rapport au module time, l'interface fournie par le module datetime est plus intuitive, plus facile à utiliser et plus puissante.

1. Explication des termes associés

  • Heure UTC Temps universel coordonné, également connu sous le nom de temps d'astronomie de Greenwich, universel Temps. L'heure locale de chaque fuseau horaire correspond à l'heure UTC. L'heure dans le fuseau Est N est antérieure de N heures à l'heure UTC, donc l'heure UTC + N heures est l'heure locale du fuseau Est N tandis que l'heure dans le fuseau Ouest N est ; N heures plus tard que l'heure UTC, c'est-à-dire l'heure UTC - N heures est l'heure locale dans la zone Ouest N. La Chine est dans la zone Est 8, elle est donc 8 heures plus tôt que l'heure UTC et peut être exprimée en UTC+ ; 8.

  • l'heure d'époque représente le point de départ du début des temps ; il s'agit d'une heure spécifique, et la valeur de ce point temporel est différente selon les plates-formes Unix, l'heure d'époque est 1970. -01 -01 00:00:00 UTC.

  • horodatage (Timestamp) Également connu sous le nom d'heure Unix ou heure POSIX ; c'est une représentation temporelle qui représente l'heure depuis le 1er janvier 1970 GMT Le nombre de millisecondes ; écoulés depuis 0:00:00, sa valeur est de type float. Cependant, certaines méthodes liées au langage de programmation renvoient le nombre de secondes (c'est le cas de Python. Pour cela, vous devez voir la documentation de la méthode). Il convient de noter que l’horodatage est une valeur de différence et que sa valeur n’a rien à voir avec le fuseau horaire.

2. Expression du temps

L'expression courante du temps est :

  • Horodatage

  • Heure formatéeChaîne

Il existe également en Python D'autres représentations temporelles de  :

  • time.struct_time du module time

  • classe datetime du module datetime

La classe datetime du module datetime sera expliquée en détail ci-dessous. Voici une brève introduction à time.struct_time.

time.struct_time contient les attributs suivants :

2
subscript/Index
下标/索引 属性名称 描述
0 tm_year 年份,如 2017
1 tm_mon 月份,取值范围为[1, 12]
2 tm_mday 一个月中的第几天,取值范围为[1-31]
3 tm_hour 小时, 取值范围为[0-23]
4 tm_min 分钟,取值范围为[0, 59]
5 tm_sec 秒,取值范围为[0, 61]
6 tm_wday 一个星期中的第几天,取值范围为[0-6],0表示星期一
7 tm_yday 一年中的第几天,取值范围为[1, 366]
8 tm_isdst 是否为夏令时,可取值为:0 , 1 或 -1
Nom de l'attribut Description
0 tm_year Année, par exemple 2017
1 tm_mon Mois, la plage de valeurs est [1, 12]
tm_mday Le jour du mois, la plage de valeurs est [1-31]
3 tm_hour heure, la plage de valeurs est [0-23]
4 tm_min minutes, la plage de valeurs est [0, 59]
5 tm_sec secondes, la plage de valeurs est [0, 61]
6 tm_wday Le jour de la semaine, la plage de valeurs est [0-6], 0 signifie lundi
7 tm_yday Jour de l'année, la plage de valeurs est [1 366]
8 tm_isdst Qu'il s'agisse de l'heure d'été, les valeurs possibles sont : 0, 1 ou -1

Il existe deux façons d'obtenir les valeurs d'attribut :

  • Vous pouvez le considérer comme une séquence immuable ordonnée spéciale pour obtenir la valeur de chaque élément via un indice/index, tel que t [0]

  • Vous pouvez également obtenir la valeur de chaque élément via le nom .attribute, tel que t.tm_year.

Il est à noter que chaque attribut de l'instance struct_time est en lecture seule et ne peut être modifié.

3. Module Temps

Le module Temps est principalement utilisé pour l'accès et la conversion du temps. Ce module fournit divers liés au temps. Fonction.

1. Liste de fonctions

Méthode/Propriété Description
time.altzone Renvoie le décalage horaire par rapport à l'heure UTC, en secondes (la valeur dans la zone ouest est positive et le la valeur dans la zone Est est un fardeau). Il représente le décalage du fuseau horaire DST local et n'est utilisé que lorsque la lumière du jour est différente de 0.
time.clock() Renvoie le nombre de secondes de fonctionnement du processeur consommées par le processus en cours (hors temps de veille), la valeur est une valeur décimale ; la méthode Python3.3 a été modifiée en time.process_time()
time.asctime([t]) Convertir une heure sous la forme de tuple ou struct_time ((peut être obtenu via les méthodes gmtime() et localtime()) et converti en une chaîne temporelle de 24 caractères au format : "Fri Aug 19 11:14:16 2016". Si le paramètre t n'est pas fourni, la valeur de retour de localtime() est prise comme paramètre.
time.ctime([secs]) La fonction est la même que ci-dessus, convertissant l'heure représentée par un horodatage des secondes en un caractère représentant le chaîne d'heure locale actuelle. Si le paramètre secs n'est pas fourni ou si la valeur est None, la valeur de retour de la méthode time() est utilisée comme valeur par défaut. ctime(secs) est équivalent à asctime(localtime(secs))
time.time() Renvoie l'horodatage (depuis 1970-1-1 0:00:00 (le nombre de secondes depuis 0:00:00)
time.localtime([secs]) Renvoie l'heure locale correspondant à l'horodatage spécifié Le struct_timeobject
方法/属性 描述
time.altzone 返回与utc时间的时间差,以秒为单位(西区该值为正,东区该值为负)。其表示的是本地DST 时区的偏移量,只有daylight非0时才使用。
time.clock() 返回当前进程所消耗的处理器运行时间秒数(不包括sleep时间),值为小数;该方法Python3.3改成了time.process_time()
time.asctime([t]) 将一个tuple或struct_time形式的时间(可以通过gmtime()和localtime()方法获取)转换为一个24个字符的时间字符串,格式为: "Fri Aug 19 11:14:16 2016"。如果参数t未提供,则取localtime()的返回值作为参数。
time.ctime([secs]) 功能同上,将一个秒数时间戳表示的时间转换为一个表示当前本地时间的字符串。如果参数secs没有提供或值为None,则取time()方法的返回值作为默认值。ctime(secs)等价于asctime(localtime(secs))
time.time() 返回时间戳(自1970-1-1 0:00:00 至今所经历的秒数)
time.localtime([secs]) 返回以指定时间戳对应的本地时间的 struct_time对象(可以通过下标,也可以通过 .属性名 的方式来引用内部属性)格式
time.localtime(time.time() + n*3600) 返回n个小时后本地时间的 struct_time对象格式(可以用来实现类似crontab的功能)
time.gmtime([secs]) 返回指定时间戳对应的utc时间的 struct_time对象格式(与当前本地时间差8个小时)
time.gmtime(time.time() + n*3600) 返回n个小时后utc时间的 struct_time对象(可以通过 .属性名 的方式来引用内部属性)格式
time.strptime(time_str, time_format_str) 将时间字符串转换为struct_time时间对象,如:time.strptime('2017-01-13 17:07', '%Y-%m-%d %H:%M')
time.mktime(struct_time_instance) 将struct_time对象实例转换成时间戳
time.strftime(time_format_str, struct_time_instance) 将struct_time对象实例转换成字符串
(peut être passé par indice ou par .attribute nameCitationattribut interne)
heure. localtime (time.time() + n*3600) Renvoie le format d'objet struct_time de l'heure locale n heures plus tard (peut être utilisé pour implémenter des fonctions similaires à crontab)
time.gmtime([secs]) Renvoie le format d'objet struct_time de l'heure UTC correspondant à l'horodatage spécifié (8 heures différentes de l'heure locale actuelle)
time.gmtime(time.time() + n*3600) Renvoie l'objet struct_time de l'heure UTC n heures plus tard (les attributs internes peuvent être référencés via le fichier . nom d'attribut) format td>
time.strptime(time_str, time_format_str) Convertissez la chaîne de temps en un objet de temps struct_time, tel que : time.strptime( '2017-01-13 17 :07', '%Y-%m-%d %H:%M')
time.mktime(struct_time_instance) Modifier l'objet struct_time Convertir l'instance en horodatage
time.strftime(time_format_str, struct_time_instance) Convertir l'instance de l'objet struct_time en chaîne

2. Exercice

Obtenir l'heure au format horodatage

>>> time.time()
1486188022.862

Obtenir struct_time Heure au format

>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=2, tm_sec=34, tm_wday=5, tm_yday=35, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=6, tm_min=2, tm_sec=56, tm_wday=5, tm_yday=35, tm_isdst=0)

Obtenir l'heure au format chaîne

>>> time.ctime()
'Sat Feb 04 14:06:42 2017'
>>> time.asctime()
'Sat Feb 04 14:06:47 2017'

Format d'horodatage au format struct_time heure

>>> t1 = time.time()
>>> print(t1)
1486188476.9
>>> t2 = time.localtime(t1)
>>> print(t2)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=7, tm_sec=56, tm_wday=5, tm_yday=35, tm_isdst=0)
>>> t3 = time.gmtime(t1)
>>> print(t3)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=6, tm_min=7, tm_sec=56, tm_wday=5, tm_yday=35, tm_isdst=0)
>>>

Convertir le format de chaîne en format struct_time time

>>> time.strptime('Sat Feb 04 14:06:42 2017')
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> time.strptime('Sat Feb 04 14:06:42 2017', '%a %b %d %H:%M:%S %Y')
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> time.strptime('2017-02-04 14:12', '%Y-%m-%d %H:%M')
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> time.strptime('2017/02/04 14:12', '%Y/%m/%d %H:%M')
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> time.strptime('201702041412', '%Y%m%d%H%M')
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)

Convertir le format struct_time en format de chaîne time

>>> time.strftime('%Y-%m-%d %H:%M', time.localtime())
'2017-02-04 14:19'

struct_time格式转时间戳格式时间
>>> time.mktime(time.localtime())
1486189282.0

3. Conversion du format de l'heure

Bien que l'heure au format horodatage et l'heure au format chaîne puissent être converties via la méthode ctime([secs]), le format de chaîne ne convient pas aux conditions nationales de la Chine. . Par conséquent, dans l'ensemble, ils ne peuvent pas être convertis directement. Ils doivent utiliser struct_time comme intermédiaire. La relation de conversion est la suivante :

Explication : Le '%H ci-dessus. :%M:%S ' peut être directement remplacé par '%X'.

4. Module Datetime

Le module datetime fournit des classes pour traiter les dates et les heures, à la fois de manière simple et complexe. Bien qu'il prenne en charge les algorithmes de date et d'heure, l'objectif de sa mise en œuvre est de fournir des fonctions efficaces d'extraction d'attributs pour le formatage et les opérations de sortie.

1. Classes définies dans le module datetime

Le module datetime définit les classes suivantes :

représente la date. Les attributs couramment utilisés sont : année, mois et jour tr >

Il est à noter que les objets de ces classes sont immuables.

Relation entre les classes :

object
 date
 datetime
 time
 timedelta
 tzinfo
 timezone

2 Constante définie dans le module datetime

Nom de la classe Description
datetime.date
datetime.time représente l'heure. : :heure, minute, seconde, microseconde
datetime.datetime représente la date et l'heure
datetime.timedelta Représente l'intervalle de temps entre deux instances de date, heure, datetime, la résolution (unité minimale) peut atteindre les microsecondes
datetime.tzinfo Classe de base abstraite pour les objets d'information liés au fuseau horaire. Ils sont utilisés par les classes datetime et time pour fournir des ajustements d’heure personnalisés.
datetime.timezone Python 3.2 Ajout de la fonction
类名称 描述
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性有:hour, minute, second, microsecond
datetime.datetime 表示日期时间
datetime.timedelta 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒
datetime.tzinfo 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。
datetime.timezone Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量
, une classe qui implémente la classe de base abstraite tzinfo et représente un décalage fixe par rapport à UTC
常量名称 描述
datetime.MINYEAR datetime.date或datetime.datetime对象所允许的年份的最小值,值为1
datetime.MAXYEAR datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999

3. classe datetime.date

Définition de la classe datetime.date

class datetime.date(year, month, day)

l'année, le mois et le jour sont des paramètres obligatoires, et la plage de valeurs de chaque paramètre Pour :

参数名称 取值范围
year [MINYEAR, MAXYEAR]
month [1, 12]
day [1, 指定年份的月份中的天数]

Méthodes et propriétés de classe

类方法/属性名称 描述
date.max date对象所能表示的最大日期:9999-12-31
date.min date对象所能表示的最小日志:00001-01-01
date.resoluation date对象表示的日期的最小单位:天
date.today() 返回一个表示当前本地日期的date对象
date.fromtimestamp(timestamp) 根据跟定的时间戳,返回一个date对象

对象方法和属性

对象方法/属性名称 描述
d.year
d.month
d.day
d.replace(year[, month[, day]]) 生成并返回一个新的日期对象,原日期对象不变
d.timetuple() 返回日期对应的time.struct_time对象
d.toordinal() 返回日期是是自 0001-01-01 开始的第多少天
d.weekday() 返回日期是星期几,[0, 6],0表示星期一
d.isoweekday() 返回日期是星期几,[1, 7], 1表示星期一
d.isocalendar() 返回一个元组,格式为:(year, weekday, isoweekday)
d.isoformat() 返回‘YYYY-MM-DD'格式的日期字符串
d.strftime(format) 返回指定格式的日期字符串,与time模块的strftime(format, struct_time)功能相同

实例

>>> import time
>>> from datetime import date
>>>
>>> date.max
datetime.date(9999, 12, 31)
>>> date.min
datetime.date(1, 1, 1)
>>> date.resolution
datetime.timedelta(1)
>>> date.today()
datetime.date(2017, 2, 4)
>>> date.fromtimestamp(time.time())
datetime.date(2017, 2, 4)
>>>
>>> d = date.today()
>>> d.year
2017
>>> d.month
2
>>> d.day
4
>>> d.replace(2016)
datetime.date(2016, 2, 4)
>>> d.replace(2016, 3)
>>> d.replace(2016, 3, 2)
datetime.date(2016, 3, 2)
>>> d.timetuple()
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> d.toordinal()
736364
>>> d.weekday()
5
>>> d.isoweekday()
6
>>> d.isocalendar()
(2017, 5, 6)
>>> d.isoformat()
'2017-02-04'
>>> d.ctime()
'Sat Feb 4 00:00:00 2017'
>>> d.strftime('%Y/%m/%d')
'2017/02/04'

4. datetime.time类

time类的定义

class datetime.time(hour, [minute[, second, [microsecond[, tzinfo]]]])

hour为必须参数,其他为可选参数。各参数的取值范围为:

参数名称 取值范围
hour [0, 23]
minute [0, 59]
second [0, 59]
microsecond [0, 1000000]
tzinfo tzinfo的子类对象,如timezone类的实例

类方法和属性

类方法/属性名称 描述
time.max time类所能表示的最大时间:time(23, 59, 59, 999999)
time.min time类所能表示的最小时间:time(0, 0, 0, 0)
time.resolution 时间的最小单位,即两个不同时间的最小差值:1微秒

对象方法和属性

对象方法/属性名称 描述
t.hour
t.minute
t.second
t.microsecond 微秒
t.tzinfo 返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None
t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]]) 生成并返回一个新的时间对象,原时间对象不变
t.isoformat() 返回一个‘HH:MM:SS.%f'格式的时间字符串
t.strftime() 返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同

实例

>>> from datetime import time
>>>
>>> time.max
datetime.time(23, 59, 59, 999999)
>>> time.min
datetime.time(0, 0)
>>> time.resolution
datetime.timedelta(0, 0, 1)
>>>
>>> t = time(20, 5, 40, 8888)
>>> t.hour
20
>>> t.minute
5
>>> t.second
40
>>> t.microsecond
8888
>>> t.tzinfo
>>>
>>> t.replace(21)
datetime.time(21, 5, 40, 8888)
>>> t.isoformat()
'20:05:40.008888'
>>> t.strftime('%H%M%S')
'200540'
>>> t.strftime('%H%M%S.%f')
'200540.008888'

5. datetime.datetime类

datetime类的定义

代码如下:

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

year, month 和 day是必须要传递的参数, tzinfo可以是None或tzinfo子类的实例。

各参数的取值范围为:

参数名称 取值范围
year [MINYEAR, MAXYEAR]
month [1, 12]
day [1, 指定年份的月份中的天数]
hour [0, 23]
minute [0, 59]
second [0, 59]
microsecond [0, 1000000]
tzinfo tzinfo的子类对象,如timezone类的实例

如果一个参数超出了这些范围,会引起ValueError异常。

类方法和属性

类方法/属性名称 描述
datetime.today() 返回一个表示当前本期日期时间的datetime对象
datetime.now([tz]) 返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上
datetime.utcnow() 返回当前utc日期时间的datetime对象
datetime.fromtimestamp(timestamp[, tz]) 根据指定的时间戳创建一个datetime对象
datetime.utcfromtimestamp(timestamp) 根据指定的时间戳创建一个datetime对象
datetime.combine(date, time) 把指定的date和time对象整合成一个datetime对象
datetime.strptime(date_str, format) 将时间字符串转换为datetime对象

对象方法和属性

对象方法/属性名称 描述
dt.year, dt.month, dt.day 年、月、日
dt.hour, dt.minute, dt.second 时、分、秒
dt.microsecond, dt.tzinfo 微秒、时区信息
dt.date() 获取datetime对象对应的date对象
dt.time() 获取datetime对象对应的time对象, tzinfo 为None
dt.timetz() 获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同
dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) 生成并返回一个新的datetime对象,如果所有参数都没有指定,则返回一个与原datetime对象相同的对象
dt.timetuple() 返回datetime对象对应的tuple(不包括tzinfo)
dt.utctimetuple() 返回datetime对象对应的utc时间的tuple(不包括tzinfo)
dt.toordinal() 同date对象
dt.weekday() 同date对象
dt.isocalendar() 同date独享
dt.isoformat([sep]) 返回一个‘%Y-%m-%d
dt.ctime() 等价于time模块的time.ctime(time.mktime(d.timetuple()))
dt.strftime(format) 返回指定格式的时间字符串

实例

>>> from datetime import datetime, timezone
>>>
>>> datetime.today()
datetime.datetime(2017, 2, 4, 20, 44, 40, 556318)
>>> datetime.now()
datetime.datetime(2017, 2, 4, 20, 44, 56, 572615)
>>> datetime.now(timezone.utc)
datetime.datetime(2017, 2, 4, 12, 45, 22, 881694, tzinfo=datetime.timezone.utc)
>>> datetime.utcnow()
datetime.datetime(2017, 2, 4, 12, 45, 52, 812508)
>>> import time
>>> datetime.fromtimestamp(time.time())
datetime.datetime(2017, 2, 4, 20, 46, 41, 97578)
>>> datetime.utcfromtimestamp(time.time())
datetime.datetime(2017, 2, 4, 12, 46, 56, 989413)
>>> datetime.combine(date(2017, 2, 4), t)
datetime.datetime(2017, 2, 4, 20, 5, 40, 8888)
>>> datetime.strptime('2017/02/04 20:49', '%Y/%m/%d %H:%M')
datetime.datetime(2017, 2, 4, 20, 49)
>>> dt = datetime.now()
>>> dt
datetime.datetime(2017, 2, 4, 20, 57, 0, 621378)
>>> dt.year
2017
>>> dt.month
2
>>> dt.day
4
>>> dt.hour
20
>>> dt.minute
57
>>> dt.second
0
>>> dt.microsecond
621378
>>> dt.tzinfo
>>> dt.timestamp()
1486213020.621378
>>> dt.date()
datetime.date(2017, 2, 4)
>>> dt.time()
datetime.time(20, 57, 0, 621378)
>>> dt.timetz()
datetime.time(20, 57, 0, 621378)
>>> dt.replace()
datetime.datetime(2017, 2, 4, 20, 57, 0, 621378)
>>> dt.replace(2016)
datetime.datetime(2016, 2, 4, 20, 57, 0, 621378)
>>> dt.timetuple()
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=20, tm_min=57, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
>>> dt.utctimetuple()
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=20, tm_min=57, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=0)
>>> dt.toordinal()
736364
>>> dt.weekday()
5
>>> dt.isocalendar()
(2017, 5, 6)
>>> dt.isoformat()
'2017-02-04T20:57:00.621378'
>>> dt.isoformat(sep='/')
'2017-02-04/20:57:00.621378'
>>> dt.isoformat(sep=' ')
'2017-02-04 20:57:00.621378'
>>> dt.ctime()
'Sat Feb 4 20:57:00 2017'
>>> dt.strftime('%Y%m%d %H:%M:%S.%f')
'20170204 20:57:00.621378'

6. 使用datetime.datetime类对时间戳与时间字符串进行转换

7. datetime.timedelta类

timedelta对象表示连个不同时间之间的差值。如果使用time模块对时间进行算术运行,只能将字符串格式的时间 和 struct_time格式的时间对象 先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date, datetime.time和datetime.datetime对象做算术运算,且两个时间之间的差值单位也更加容易控制。
 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。

datetime.timedelta类的定义

代码如下:

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)

所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位:

  • 1毫秒转换为1000微秒

  • 1分钟转换为60秒

  • 1小时转换为3600秒

  • 1周转换为7天

然后对这3个值进行标准化,使得它们的表示是唯一的:

  • microseconds : [0, 999999]

  • seconds : [0, 86399]

  • days : [-999999999, 999999999]

类属性

类属性名称 描述
timedelta.min timedelta(-999999999)
timedelta.max timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolution timedelta(microseconds=1)

实例方法和属性

实例方法/属性名称 描述
td.days 天 [-999999999, 999999999]
td.seconds 秒 [0, 86399]
td.microseconds 微秒 [0, 999999]
td.total_seconds() 时间差中包含的总秒数,等价于: td / timedelta(seconds=1)


方法/属性 描述
datetime.datetime.now() 返回当前本地时间(datetime.datetime对象实例)
datetime.datetime.fromtimestamp(timestamp) 返回指定时间戳对应的时间(datetime.datetime对象实例)
datetime.timedelta() 返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作

实例

>>> import datetime
>>>
>>> datetime.timedelta(365).total_seconds() # 一年包含的总秒数
31536000.0
>>> dt = datetime.datetime.now()
>>> dt + datetime.timedelta(3) # 3天后
datetime.datetime(2017, 2, 8, 9, 39, 40, 102821)
>>> dt + datetime.timedelta(-3) # 3天前
datetime.datetime(2017, 2, 2, 9, 39, 40, 102821)
>>> dt + datetime.timedelta(hours=3) # 3小时后
datetime.datetime(2017, 2, 5, 12, 39, 40, 102821)
>>> dt + datetime.timedelta(hours=-3) # 3小时前
datetime.datetime(2017, 2, 5, 6, 39, 40, 102821)
>>> dt + datetime.timedelta(hours=3, seconds=30) # 3小时30秒后 
datetime.datetime(2017, 2, 5, 12, 40, 10, 102821)

五、时间格式码

time模块的struct_time以及datetime模块的datetime、date、time类都提供了strftime()方法,该方法可 以输出一个指定格式的时间字符串。具体格式由一系列的格式码(格式字符)组成,Python最终调用的是各个平台C库的strftme()函数,因此各平台对全套格式码的支持会有所不同,具体情况需要参考该平台上的strftime(3)文档。下面列出了C标准(1989版)要求的所有格式码,它们在所有标准C实现的平台上都可以工作:

六、总结

那么Python中处理时间时,使用time模块好,还是用datetime模块好呢?就我个人而言,datetime模块基本上可以满足需要,且用起来确实比较方便。对于time模块,我只是在取当前时间的时间戳时会用到time.time()方法,当然也可以通过datetime.datetime.now().timestamp()来获取,只是显得复杂一点。我觉得还是看个人习惯吧,没有什么绝对的好坏之分。

【相关推荐】

1. Python免费视频教程

2. Python学习手册

3. Python面向对象视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn