Heim > Artikel > Backend-Entwicklung > Python-Datetime- und Datumsmodule
In diesem Artikel wird hauptsächlich das Datums- und Uhrzeitverarbeitungsmodul (Datum und Uhrzeit) von Python vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Kommen Sie und werfen Sie einen Blick mit dem Herausgeber
Vorwort
Bei der Entwicklungsarbeit müssen wir oft Datum und Uhrzeit verwenden, wie zum Beispiel:
Ausgabe als Inhalt von Protokollinformationen
Berechnen Sie die Ausführungszeit einer bestimmten Funktion
Datum verwenden Benennen Sie eine Protokolldatei
Veröffentlichungs- oder Änderungszeit eines Artikels aufzeichnen oder anzeigen
Sonstiges
Python bietet mehrere integrierte Module für die Arbeit mit Datum und Uhrzeit: Zeitmodul, Datum/Uhrzeit-Modul und Kalender-Modul. Das Zeitmodul wird durch Aufrufen der C-Bibliothek implementiert, sodass einige Methoden auf einigen Plattformen möglicherweise nicht aufgerufen werden, aber die meisten der von ihm bereitgestellten Schnittstellen stimmen grundsätzlich mit der C-Standardbibliothek time.h überein. Im Vergleich zum Zeitmodul ist die vom Datum/Uhrzeit-Modul bereitgestellte Schnittstelle intuitiver, benutzerfreundlicher und leistungsfähiger.
1. Erläuterung verwandter Begriffe
UTC-Zeit, auch bekannt als Greenwich Astronomy Time, Universal Zeit. Die UTC-Zeit entspricht der Ortszeit jeder Zeitzone. Die Zeit in der Ost-N-Zone ist N Stunden früher als die UTC-Zeit, daher ist UTC-Zeit + N Stunden die Ortszeit der Ost-N-Zone N Stunden später als die UTC-Zeit, d. h. UTC-Zeit – N Stunden ist die Ortszeit in der West-N-Zone, also 8 Stunden früher als die UTC-Zeit, und kann als UTC+ ausgedrückt werden 8.
Epochenzeit stellt den Startpunkt des Zeitbeginns dar; der Wert dieses Zeitpunkts ist auf verschiedenen Plattformen unterschiedlich. Für Unix ist die Epochenzeit 1970 -01 -01 00:00:00 UTC.
Zeitstempel (Zeitstempel) Auch bekannt als Unix-Zeit oder POSIX-Zeit; es handelt sich um eine Zeitdarstellung, die die Zeit seit dem 1. Januar 1970 GMT darstellt. Die Anzahl der Millisekunden die seit 0:00:00 verstrichen sind, ist sein Wert vom Typ float. Einige Programmiersprachen-bezogene Methoden geben jedoch die Anzahl der Sekunden zurück (dies ist bei Python der Fall). Dazu müssen Sie sich die Dokumentation der Methode ansehen. Es ist zu beachten, dass der Zeitstempel ein Differenzwert ist und sein Wert nichts mit der Zeitzone zu tun hat.
2. Zeitausdruck
Der übliche Zeitausdruck ist:
Zeitstempel
Formatierte ZeitString
Es gibt auch in Python. Andere Zeitdarstellungen von :
time.struct_time des Zeitmoduls
datetime-Klasse des datetime-Moduls
Die datetime-Klasse des datetime-Moduls wird im Folgenden ausführlich erläutert. Hier finden Sie eine kurze Einführung in time.struct_time.
time.struct_time enthält die folgenden Attribute:
subscript/Index
|
Attributname | Beschreibung | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | tm_year | Jahr, z. B. 2017 | ||||||||||||||||||||||||||||||
1 | tm_mon | Monat, der Wertebereich ist [1, 12] | ||||||||||||||||||||||||||||||
tm_mday | Der Tag des Monats, der Wertebereich ist [1-31] | |||||||||||||||||||||||||||||||
3 | tm_hour | Stunde, der Wertebereich ist [0-23] | ||||||||||||||||||||||||||||||
4 | tm_min | Minuten, der Wertebereich ist [0, 59] | ||||||||||||||||||||||||||||||
5 | tm_sec | Sekunden, der Wertebereich ist [0, 61] | ||||||||||||||||||||||||||||||
6 | tm_wday | Der Wochentag, der Wertebereich ist [0-6], 0 bedeutet Montag | ||||||||||||||||||||||||||||||
7 | tm_yday | Der Tag des Jahres, der Wertebereich ist [1, 366] | ||||||||||||||||||||||||||||||
8 | tm_isdst | Ob Sommerzeit ist, die möglichen Werte sind: 0, 1 oder -1 |
Es gibt zwei Möglichkeiten, Attributwerte zu erhalten:
Sie können es sich als eine speziell geordnete unveränderliche Sequenz vorstellen, um den Wert jedes Elements über Index/Index zu erhalten, z. B. t [0]
Sie können den Wert jedes Elements auch über den .attribute-Namen abrufen, z. B. t.tm_year.
Es ist zu beachten, dass jedes Attribut der struct_time-Instanz schreibgeschützt ist und nicht geändert werden kann.
3. Zeitmodul
Das Zeitmodul dient hauptsächlich dem Zeitzugriff und der Umrechnung. Dieses Modul bietet verschiedene zeitbezogene Funktion.
1. Funktionsliste
Methode/Eigenschaft | Beschreibung | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
time.altzone | Gibt den Zeitunterschied zur UTC-Zeit in Sekunden zurück (der Wert in der Westzone ist positiv und der Wert in der Ostzone ist Belastung). Es stellt den Offset der lokalen DST-Zeitzone dar und wird nur verwendet, wenn das Tageslicht ungleich 0 ist. | ||||||||||||||||||||||||||
time.clock() | Gibt die Anzahl der vom aktuellen Prozess verbrauchten Prozessorlaufzeitsekunden zurück (ohne Ruhezeit), der Wert ist eine Dezimalzahl ; Die Methode Python3.3 wurde in time.process_time() | ||||||||||||||||||||||||||
time.asctime([t]) | Konvertieren Sie eine Zeit in das Formular von tuple oder struct_time ( (kann über die Methoden gmtime() und localtime() abgerufen werden) und in eine 24-stellige Zeitzeichenfolge im Format „Fri Aug 19 11:14:16 2016“ konvertiert werden. Wenn der Parameter t nicht angegeben wird, wird der Rückgabewert von localtime() als Parameter verwendet. | ||||||||||||||||||||||||||
time.ctime([secs]) | Die Funktion ist die gleiche wie oben und wandelt die durch einen Sekunden-Zeitstempel dargestellte Zeit in ein Zeichen um, das die darstellt aktuelle lokale Zeitzeichenfolge. Wenn der Parameter secs nicht angegeben ist oder der Wert None ist, wird der Rückgabewert der time()-Methode als Standardwert verwendet. ctime(secs) ist äquivalent zu asctime(localtime(secs)) | ||||||||||||||||||||||||||
time.time() | Gibt den Zeitstempel zurück (seit 1970-1-1). 0:00:00 (die Anzahl der Sekunden seit 0:00:00) | ||||||||||||||||||||||||||
time.localtime([secs]) | Gibt die Ortszeit zurück entsprechend dem angegebenen Zeitstempel Das struct_timeObjekt
|
||||||||||||||||||||||||||
Zeit. localtime (time.time() + n*3600) | Gibt das struct_time-Objektformat der Ortszeit n Stunden später zurück (kann zur Implementierung ähnlicher Funktionen wie crontab verwendet werden) | ||||||||||||||||||||||||||
time.gmtime([secs]) | Gibt das struct_time-Objektformat der UTC-Zeit zurück, die dem angegebenen Zeitstempel entspricht (8 Stunden abweichend von der aktuellen Ortszeit) | ||||||||||||||||||||||||||
time.gmtime(time.time() + n*3600) | Gibt das struct_time-Objekt der UTC-Zeit n Stunden später zurück (interne Attribute können über referenziert werden). Attributname) Format td> | ||||||||||||||||||||||||||
time.strptime(time_str, time_format_str) | Konvertieren Sie die Zeitzeichenfolge in ein struct_time-Zeitobjekt, wie zum Beispiel: time.strptime( '2017-01-13 17 :07', '%Y-%m-%d %H:%M') | ||||||||||||||||||||||||||
time.mktime(struct_time_instance) | Ändern Sie das struct_time-Objekt. Konvertieren Sie die Instanz in einen Zeitstempel | ||||||||||||||||||||||||||
time.strftime(time_format_str, struct_time_instance) | Konvertieren Sie die struct_time-Objektinstanz in einen String |
2. Übung
Erhalten Sie die Zeit im Zeitstempelformat
>>> time.time() 1486188022.862
Erhalten Sie struct_time Zeit im 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)
Zeit im String-Format abrufen
>>> time.ctime() 'Sat Feb 04 14:06:42 2017' >>> time.asctime() 'Sat Feb 04 14:06:47 2017'
Zeitstempelformat für struct_time-Formatzeit
>>> 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) >>>
Konvertieren Sie das String-Format in das Zeitformat „struct_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)
Konvertieren Sie das Format „struct_time“ in das Zeitformat „String_time“
>>> time.strftime('%Y-%m-%d %H:%M', time.localtime()) '2017-02-04 14:19' struct_time格式转时间戳格式时间 >>> time.mktime(time.localtime()) 1486189282.0
3. Zeitformatkonvertierung
Obwohl die Zeit im Zeitstempelformat und die Zeit im String-Format mit der Methode ctime([secs]) konvertiert werden können, ist das String-Format nicht für die nationalen Bedingungen Chinas geeignet . Daher können sie im Großen und Ganzen nicht direkt konvertiert werden. Sie müssen struct_time als Vermittler verwenden. Die Konvertierungsbeziehung ist wie folgt:
Erklärung: Das obige „%H :%M:%S ' kann direkt durch '%X' ersetzt werden.
4. Datetime-Modul
Das Datetime-Modul bietet Klassen für die Verarbeitung von Datums- und Uhrzeitangaben, sowohl auf einfache als auch auf komplexe Weise. Obwohl es Datums- und Uhrzeitalgorithmen unterstützt, liegt der Schwerpunkt seiner Implementierung auf der Bereitstellung effizienter Attributextraktionsfunktionen für Ausgabeformatierungen und -operationen.
1. Im Datetime-Modul definierte Klassen
Das Datetime-Modul definiert die folgenden Klassen:
Klassenname | Beschreibung | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime.date | stellt das Datum dar. Häufig verwendete Attribute sind: Jahr, Monat und Tag|||||||||||||||
datetime.time | stellt die Zeit dar ::Stunde, Minute, Sekunde, Mikrosekunde | ||||||||||||||
datetime.datetime | repräsentiert Datum und Uhrzeit | ||||||||||||||
datetime.timedelta | Stellt das Zeitintervall zwischen zwei Datums-, Uhrzeit- und Datetime-Instanzen dar, die Auflösung (minimale Einheit) kann Mikrosekunden erreichen | tr >||||||||||||||
datetime.tzinfo | Abstrakte Basisklasse für zeitzonenbezogene Informationsobjekte. Sie werden von den Datetime- und Time-Klassen verwendet, um benutzerdefinierte Zeitanpassungen bereitzustellen. | ||||||||||||||
datetime.timezone | Python 3.2 Funktion
|
常量名称 | 描述 |
---|---|
datetime.MINYEAR | datetime.date或datetime.datetime对象所允许的年份的最小值,值为1 |
datetime.MAXYEAR | datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999 |
3. datetime.date-Klasse
Definition der datetime.date-Klasse
class datetime.date(year, month, day)
Jahr, Monat und Tag sind erforderliche Parameter und der Wertebereich jedes Parameters Für:
参数名称 | 取值范围 |
---|---|
year | [MINYEAR, MAXYEAR] |
month | [1, 12] |
day | [1, 指定年份的月份中的天数] |
Klassenmethoden und -eigenschaften
类方法/属性名称 | 描述 |
---|---|
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学习手册
Das obige ist der detaillierte Inhalt vonPython-Datetime- und Datumsmodule. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!