Im Leben und im Beruf beschäftigt sich jeder von uns jeden Tag mit Zeit:
Wann stehst du morgens auf?
Wie viele Minuten dauert es, bis die U-Bahn ankommt?
Wann beginnt mittags die Mittagspause?
Welcher Wochentag ist morgen?
Es ist 2 Monate her, seit du das letzte Mal Kleidung gekauft hast?
Mein Chef hat mich gebeten, dem Code eine Funktion für geplante Aufgaben hinzuzufügen. Was soll ich tun?
In verschiedenen Situationen treten unterschiedliche Zeitprobleme auf: Bestimmte Zeitpunkte, Zeitintervalle, Wochentage usw. Wir kollidieren ständig mit der Zeit. In diesem Artikel werden zeitbezogene Klassen, ihre Methoden und Attribute mithilfe von Python ausführlich erläutert Dafür müssen wir zunächst ein Konzept haben:
ZeitstempelZeitstempel Unter Zeitstempel versteht man das Hinzufügen von Identifikationstexten wie Uhrzeit oder Datum usw. zu einer Reihe von Daten, um sicherzustellen, dass die lokale Datenaktualisierungssequenz mit der Remote-Datenaktualisierungssequenz übereinstimmt.
unix
Der Zeitstempel ist die Anzahl der Sekunden, die seit dem 1. Januar 1970 (Mitternacht UTC/GMT) vergangen sind, unabhängig von Schaltsekunden. 1970-01-01 ist oft die Zeit, die wir nach der Konvertierung des leeren Zeitstempels erhalten, wenn die Zeit in MySQL leer ist. Eine Stunde wird als UNIX-Zeitstempel im Format 3600 Sekunden ausgedrückt; ein Tag wird als UNIX-Zeitstempel von 86400 Sekunden ausgedrückt, Schaltsekunden werden nicht gezählt. Die spezifische Vergleichstabelle lautet wie folgt: unix
时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。1970-01-01就是经常我们在MySQL中时间为空的时候,转化空的时间戳之后得到的时间。一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。具体的对照表如下:
下面介绍几个时间戳和具体时间之间相互转化的网站:
1、站长工具:https://tool.chinaz.com/tools/unixtime.aspx
2、在线工具:https://tool.lu/timestamp/
3、Json在线解析:https://www.sojson.com/unixtime.html
4、Unix时间戳在线转换(菜鸟工具):https://c.runoob.com/front-end/852
5、北京时间(时间与时间戳互换工具):http://www.beijing-time.org/shijianchuo/
介绍完时间戳的基本知识,下面重点讲解3个与时间和日期相关的Python库:
calendar
time
datetime
calendar
1. Webmaster-Tools: https://tool.chinaz.com/tools/unixtime.aspx
🎜2 Online-Tools: https://tool.lu/timestamp/🎜🎜3 ://www.sojson.com/unixtime.html🎜🎜4. Unix-Zeitstempel-Online-Konvertierung (Rookie-Tool): https://c.runoob.com/front-end/852🎜🎜5. Pekinger Zeit (Zeit und Zeitstempel). Austauschtool): http://www.beijing-time.org/shijianchuo/🎜🎜Nachdem wir das Grundwissen über Zeitstempel eingeführt haben, konzentrieren wir uns auf drei Python-Bibliotheken, die sich auf Zeit und Datum beziehen: 🎜🎜calendar🎜🎜
🎜time🎜🎜
🎜datetime🎜🎜 li>
calendar
s chinesische Bedeutung ist "Kalender", also ist es tatsächlich so geeignet für Termine, insbesondere in Form eines Kalenders. 🎜🎜🎜2.1 Modulinhalt🎜🎜🎜🎜🎜🎜Das Folgende ist ein Beispiel:🎜Wir zeigen den Kalender des kommenden Jahres 2020 mit den Standardparametern an:
import calendar year = calendar.calendar(2020) print(year)
Ändern Sie die Parameter und zeigen Sie ihn erneut an:
year = calendar.calendar(2020,w=3,l=1,c=8) print(year)
Wir haben The gefunden Der gesamte Kalender ändert sich. Er ist breiter und die Woche wird auch auf Englisch mit 3 Buchstaben angezeigt. Bitte erläutern Sie die Bedeutung der drei Parameter:
c: monatlicher Intervallabstand
w: täglicher Breitenintervall ?? 2.3isleap(year)
zu bestimmen, ob ein bestimmtes Jahr ein Schaltjahr ist. Wenn ja, wird True zurückgegeben, andernfalls wird False zurückgegeben.
Jahre sind in Hunderten angegeben und müssen durch 400 teilbar sein. Sie werden als Jahrhundertschaltjahre bezeichnet 21*w+18+2*c
2,4 Schalttage (y1, y2)
Diese Funktion gibt year
year< code style= "font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0); Background: rgb (248, 248, 248);">MonatDer Monatskalender hat nur zwei Titelzeilen, eine für jede Woche. Die tägliche Intervallbreite beträgt w Zeichen und die Länge jeder Zeile beträgt 7*w + 6
, wobei l die Anzahl der Zeilen pro Woche istyear
年的month
月的日历,只有两行标题,一周一行。每日间隔宽度为w个字符,每行的长度为7*w + 6
,其中l是每星期的行数
首先看看默认效果;
接下来我们改变w和l两个参数:
1、改变w
,我们发现星期的表示变成了3个字母;同时每天之间的间隔变宽了(左右间隔)
2、改变参数l
w
, wir stellen fest, dass die Darstellung der Woche zu 3 Buchstaben geworden ist; gleichzeitig ist das Intervall zwischen jedem Tag ist breiter geworden (linkes und rechtes Intervall)2 Änderung Parameterl
, wir stellen fest, dass das Intervall (oben und unten) vor jeder Woche größer wird
2,6Monatskalender(Jahr,Monat)
gibt das Jahr in Listenform zurück. Monatskalender, in Listen- oder Listenform. Jede Unterliste ist für eine Woche gültig.Nehmen wir den Dezember 2020 als Beispiel:
🎜🎜🎜🎜Verglichen mit dem Kalender oben haben wir Folgendes festgestellt: 🎜Die Position, an der 0 erscheint, erscheint im Dezember nicht🎜🎜🎜Werfen wir einen Blick auf den Kalender für März 2020: 🎜Das von dieser Funktion zurückgegebene Ergebnis ist ein Tupel. Es gibt zwei Werte im Tupel. Der Wert a repräsentiert den Tag des Woche, in der der Monat beginnt; Es ist festgelegt, dass 6 den Sonntag darstellt und der Wert 0-6 ist. Der Wert b stellt die Gesamtzahl der Tage im Monat dar. Lassen Sie es uns anhand eines Beispiels erklären Nehmen wir als Beispiel den Dezember 2020: (a,b)
Die 1 im Ergebnis bedeutet, dass der Dezember am 2. der Woche beginnt (0-6, 6 steht für Sonntag) und der Monat insgesamt 31 Tage hat
2.8weekday(y,m,d)Die Wochentagsmethode besteht darin, Jahr, Monat und Tag einzugeben. Wir können dann wissen, welcher Wochentag es ist. Der Rückgabewert ist 0-6, 0 steht für Montag , 6 steht für Sonntag
Das Zeitmodul ist das am häufigsten verwendete Modul mit Zeitfunktionen. Es wird häufig in den zeitbezogenen Anforderungen von Python verwendet unten. 3.1 Modulinhalt
Schauen wir uns zunächst die Gesamtnutzung des Moduls an 再次理解时间戳:它是以1970年1月1日0时0份0秒为计时起点,计算到当前的时间长度(不考虑闰秒) 笔记:结果是时间元组 Verstehen Sie den Zeitstempel noch einmal: Er beginnt bei 0:00:00 Uhr am 1. Januar 1970 und berechnet sich auf die aktuelle Zeitspanne (wobei keine Schaltsekunden berücksichtigt werden) 3.3localtime Hinweise: Ergebnisse Es ist ein Zeittupel3.2time
time.time()
dient dazu, die aktuelle Zeit abzurufen. Genauer gesagt geht es darum,Zeitstempel der aktuellen Zeit. time.time()
是获取当前的时间,更加严格地说,是获取当前时间的时间戳。3.3localtime
time.localtime
是打印当前的时间,得到的结果是时间元组,具体含义:time.localtime
的参数默认是time.time()
time.localtime
wird durch Drucken der aktuellen Uhrzeit erhalten. Das Ergebnis ist ein Zeittupel mit spezifischer Bedeutung:
Die Standardparameter von time.localtime
sind time.time()
Zeitstempel, den Sie eingeben können it yourself Ein bestimmter Zeitstempel, um die entsprechende Zeit zu erhalten🎜🎜🎜🎜🎜Standardmäßiger aktueller Zeitstempel🎜🎜🎜🎜🎜🎜Geben Sie einen Zeitstempel an🎜🎜localtime()
Das Ergebnis istOrtszeit, wenn Internationalisierung erforderlich ist, verwenden Sie gmtime()
Am besten verwenden Sie die Greenwich Mean Time. localtime()
得到的是本地时间,如果需要国际化,使用gmtime()
,最好是使用格林威治时间。
格林威治标准时间:位于英国伦敦郊区的皇家格林威治天文台的标准时间,本初子午线经过那里。
time.asctime
的参数为空时,默认是以time.localtime的值为参数,得到当前的日期、时间、星期;另外,我们也可以自己设置参数,参数是时间元组
使用当前时间的默认时间元组localtime
自己指定一个时间元组
获取当前时间的具体时间和日期:
ctime
Wenn der Parameter von time.asctime
leer ist, ist der StandardwertNehmen Sie den Wert von time.localtime als Parameter, um das aktuelle Datum, die aktuelle Uhrzeit und die aktuelle Woche zu erhalten; außerdem können wir die Parameter auch selbst festlegen, Der Parameter ist ein Zeittupel🎜🎜Verwenden Sie die Standardeinstellung der aktuellen Zeit. Zeittupel Ortszeit🎜🎜🎜
🎜Angeben ein Zeittupel selbst🎜🎜🎜 🎜🎜🎜🎜Erhalten Sie die genaue Uhrzeit und das Datum der aktuellen Zeit: 🎜🎜🎜🎜🎜3.6ctime🎜🎜🎜ctime
s Parameter ist standardmäßig ein Zeitstempel; wenn nicht, können Sie auch einen Zeitstempel angeben🎜
mktime()
benötigt auch ein Zeittupel als Parameter und gibt einen Zeitstempel zurück, EntsprichtUmkehrung der Ortszeit
Prozess : mktime()
也是以时间元组为参数的,它返回的是时间戳,相当于是localtime
的逆向过程:
strftime()
是按照我们指定的格式将时间元组转化为字符串;如果不指定时间元组,默认是当前时间localtime()
。常用到的时间格式见下表:
我们举例说明:
字符串中的分隔符我们可以任意指定
可以同时显示年月日时分秒等
strptime()
3.8strftime
< Code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0); Hintergrund : rgb(248, 248, 248);">strftime() hat das von uns angegebene FormatZeittupel in String konvertieren; Wenn kein Zeittupel angegeben ist, ist der Standardwert die aktuelle Zeitlocaltime()</code >. Die häufig verwendeten Zeitformate sind in der folgenden Tabelle aufgeführt: </li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><img src="https://img.php.cn/upload/article/001/267/443/19f8374af9231fe215ddc9b7b1316611-25.png"/ alt="Eine Zusammenfassung der Python-Zeitkonvertierung, die Sie auf einmal erlernen können (sehr vollständig)" ><p><span style="max-width:90%"> Lass uns Geben Sie ein Beispiel: </span></p>🎜🎜🎜Wir können das Trennzeichen in der Zeichenfolge beliebig angeben🎜🎜🎜🎜🎜🎜 können Jahr, Monat, Tag, Stunde, Minute, Sekunde usw. gleichzeitig anzeigen🎜🎜🎜</ ul>🎜<img src="https://img.php .cn/upload/article/001/267/443/19f8374af9231fe215ddc9b7b1316611-26.jpg"/ alt="Eine Zusammenfassung der Python-Zeitkonvertierung, die Sie auf einmal erlernen können (sehr vollständig)" >🎜🎜🎜3.9strptime🎜🎜🎜<code style="max-width:90%">strptime()
Es dient dazu, eine Zeichenfolge in ein Zeittupel umzuwandeln. Worauf wir besonders achten müssen, ist, dass es zwei Parameter hat: 🎜🎜🎜🎜🎜Die zu seinde Zeichenfolge konvertiert🎜🎜🎜🎜🎜🎜Das Format, das der Zeitzeichenfolge entspricht, ist das Format, das oben in der Tabelle erwähnt wird?Obwohl time
Modul kann bereits viele Probleme lösen, aber in der tatsächlichen Arbeit und im Geschäftsbedarf Wir Wir benötigen mehr Tools, um die Verwendung komfortabler und schneller zu gestalten. datetime
ist eines der sehr nützlichen Module. Mehrere häufig verwendete Klassen im datetime
-Modul sind wie folgt: time
模块已经能够解决很多的问题,但是实际工作和业务需求中需要更多的工具,让我们使用起来更方便和快捷,datetime
便是其中一个很好用的模块。datetime
模块中几个常用的类如下:
date
:日期类,常用属性:year/month/day
time
:时间类,常用属性:hour/minute/second/microsecond
datetime
:日期时间类
timedelta
:时间间隔,即两个时间点之间的时间长度
tzinfo
Datum
: Datumsklasse, allgemeine Attribute: Jahr/Monat/Tag</code ></p> 🎜<li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><code style="font-size: inherit;line-height : inherit ;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);"> Zeit< /code>: Zeitklasse, häufig verwendete Attribute: <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left : 2px; Farbe: rgb(233, 105, 0);Hintergrund: rgb(248, 248, 248);">Stunde/Minute/Sekunde/Mikrosekunde
🎜🎜datetime
: Datums- und Zeitklasse🎜🎜< li style=" Schriftgröße: inherit;Farbe: inherit;Zeilenhöhe: inherit;margin-bottom: 0.5em;">
timedelta</code >: Zeitintervall, also die Zeitspanne zwischen zwei Zeitpunkten🎜🎜<li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p ><code style= "font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0 );Hintergrund: RGB (248, 248, 248);">tzinfo
: Zeitzonenklasse🎜
首先我们引入date
类,并创建一个日期对象:
1、然后我们可以操作这个日期对象的各种属性:后面加上()
print("当前日期:",today) # 当前日期 print("当前日期(字符串):",today.ctime()) # 返回日期的字符串 print("时间元组信息:",today.timetuple()) # 当前日期的时间元组信息 print("年:",today.year) # 返回today对象的年份 print("月:",today.month) # 返回today对象的月份 print("日:",today.day) # 返回today对象的日 print("星期:",today.weekday()) # 0代表星期一,类推 print("公历序数:",today.toordinal()) # 返回公历日期的序数 print("年/周数/星期:",today.isocalendar()) # 返回一个元组:一年中的第几周,星期几 # 结果显示 当前日期: 2020-12-25 当前日期(字符串):Fri Dec 25 00:00:00 2020 时间元组信息:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=360, tm_isdst=-1) 年: 2020 月: 12 日: 25 星期: 4 公历序数: 737784 年/周数/星期: (2020, 52, 5)
2、date类中时间和时间戳的转换:
具体时间的时间戳转成日期:
3、格式化时间相关,格式参照time模块中的strftime方法
from datetime import datetime, date, time today = date.today() print(today) # 2020-12-26 默认连接符号是- print(today.strftime("%Y/%m/%d")) # 指定连接符 # 2020/12/26 print(today.strftime("%Y:%m:%d")) # 2020:12:26 print(today.strftime("%Y/%m/%d %H:%M:%S")) # 转化为具体的时间 # 2020/12/26 00:00:00
4、修改日期使用replace
方法
time
类也是要生成time
对象,包含hour、minute、second、microsecond
,我们还是通过例子来学习:
from datetime import time t = time(10,20,30,40) print(t.hour) # 时分秒 print(t.minute) print(t.second) print(t.microsecond) # 微秒 # 结果 10 20 30 40
datetime类包含date类和time类的全部信息,下面?是类方法相关的:
from datetime import datetime print(datetime.today()) print(datetime.now()) print(datetime.utcnow())# 返回当前UTC日期和时间的datetime对象 print(datetime.fromtimestamp(1697302830)) # 时间戳的datetime对象 print(datetime.fromordinal(699000) ) print(datetime.combine(date(2020,12,25), time(11,22,54))) # 拼接日期和时间 print(datetime.strptime("2020-12-25","%Y-%m-%d")) # 结果 2020-12-25 23:24:42.481845 2020-12-25 23:24:42.482056 2020-12-25 15:24:42.482140 2023-10-15 01:00:30 1914-10-19 00:00:00 2020-12-25 11:22:54 2020-12-25 00:00:00
再看看相关对象和属性相关:
from datetime import datetime d = datetime(2020,12,25,11,24,23) print(d.date()) print(d.time()) print(d.timetz()) # 从datetime中拆分出具体时区属性的time print(d.replace(year=2021,month=1)) # 替换 print(d.timetuple()) # 时间元组 print(d.toordinal()) # 和date.toordinal一样 print(d.weekday()) print(d.isoweekday()) print(d.isocalendar()) print(d.isoformat()) print(d.strftime("%Y-%m-%d :%H:%M:%S")) # 结果 2020-12-25 11:24:23 11:24:23 2021-01-25 11:24:23 time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=11, tm_min=24, tm_sec=23, tm_wday=4, tm_yday=360, tm_isdst=-1) 737784 4 5 (2020, 52, 5) 2020-12-25T11:24:23 2020-12-25 :11:24:23
timedelta
对象表示的是一个时间段,即两个日期date
或者日期时间datetime
之间的差;支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds
本地时间指的是我们系统本身设定时区的时间,例如中国处于北京时间,常说的东八区UTC+8:00
。datetime
类有一个时区属性tzinfo
。
tzinfo
是一个关于时区信息的类,是一个抽象的基类,不能直接被实例化来使用。它的默认值是None
,无法区分具体是哪个时区,需要我们强制指定一个之后才能使用。
因为本身系统的时区刚好在中国处于东八区,所以上述代码是能够正常运行的,结果也是OK的。那如果我们想切换到其他时区的时间,该如何操作呢?这个时候我们需要进行时区的切换。
1、我们先通过utcnow()
获取到当前的UTC时间
utc_now = datetime.utcnow().replace(tzinfo=timezone.utc) # 指定utc时区 print(utc_now) # 结果 2020-12-26 01:36:33.975427+00:00
2、通过astimezone()
将时区指定为我们想转换的时区,比如东八区(北京时间):
# 通过astimezone切换到东八区 beijing = utc_now.astimezone(timezone(timedelta(hours=8))) print(beijing) # 结果 2020-12-26 09:36:33.975427+08:00
用同样的方法切到东九区,东京时间:
# UTC时区切换到东九区:东京时间 tokyo = utc_now.astimezone(timezone(timedelta(hours=9))) print(tokyo) # 结果 2020-12-26 10:36:33.975427+09:00
还可以直接从北京时间切换到东京时间:
# 北京时间(东八区)直接切换到东京时间(东九区) tokyo_new = beijing.astimezone(timezone(timedelta(hours=9))) print(tokyo_new) # 结果 2020-12-26 10:36:33.975427+09:00
下面介绍几个工作中用到的时间转化小技巧:
时间戳转日期
日期转时间戳
格式化时间
指定格式获取当前时间
时间戳转成具体时间,我们需要两个函数:
time.localtime
:将时间戳转成时间元组形式
time.strftime
:将时间元组数据转成我们需要的形式
import time now_timestamp = time.time() # 获取当前时间的时间戳 # 时间戳先转成时间元组,strftime在转成指定格式 now_tuple = time.localtime(now_timestamp) time.strftime("%Y/%m/%d %H:%M:%S", now_tuple) # 结果 '2020/12/26 11:19:01'
假设我们指定一个具体的时间戳来进行转换:
import time timestamp = 1608852741 # 指定时间戳 a = time.localtime(timestamp) # 获得时间元组形式数据 print("时间元组数据:",a) time.strftime("%Y/%m/%d %H:%M:%S", a) # 格式化 # 结果 时间元组数据:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=7, tm_min=32, tm_sec=21, tm_wday=4, tm_yday=360, tm_isdst=0) '2020/12/25 07:32:21'
如果我们不想指定具体的格式,只想获取时间戳对应的时间,直接通过time.ctime
即可:
import time time.ctime(1608852741) # 结果 'Fri Dec 25 07:32:21 2020'
日期时间转成时间戳格式,我们需要使用两个方法:
strptime()
:将时间转换成时间数组
mktime()
:将时间数组转换成时间戳
通过具体的案例来学习一下:
date = "2020-12-26 11:45:34" # 1、时间字符串转成时间数组形式 date_array = time.strptime(date, "%Y-%m-%d %H:%M:%S") # 2、查看时间数组数据 print("时间数组:", date_array) # 3、mktime时间数组转成时间戳 time.mktime(date_array) # 结果 时间数组:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=5, tm_yday=361, tm_isdst=-1) 1608954334.0
工作需求中有时候给定的时间格式未必是我们能够直接使用,所以可能需要进行格式的转换,需要使用两个方法:
strptime()
:将时间转换成时间数组
strftime()
:重新格式化时间
通过案例来进行学习:
import time old = "2020-12-12 12:28:45" # 1、转换成时间数组 time_array = time.strptime(old, "%Y-%m-%d %H:%M:%S") # 2、转换成新的时间格式(20201212-20:28:54) new = time.strftime("%Y%m%d-%H:%M:%S",time_array) # 指定显示格式 print("原格式时间:",old) print("新格式时间:",new) # 结果 原格式时间: 2020-12-12 12:28:45 新格式时间: 20201212-12:28:45
为了能够获取到指定格式的当前时间,我们分为3个步骤:
time.time()
:获取当前时间
time.localtime()
:转成时间元组
time.strftime()
:重新格式化时间
通过一个案例来学习:
# 1、时间戳 old_time = time.time() # 2、时间元组 time_array = time.localtime(old_time) # 3、指定格式输出 new_time = time.strftime("%Y/%m/%d %H:%M:%S", time_array) print(new_time) # 结果 2020/12/26 11:56:08
本文通过各种案例详细介绍了Python
中关于时间输出和转化的3个模块:calendar、time、datetime
,最后总结了4个工作中常用的时间转化技巧,希望对大家掌握Python中的时间输出和转化有所帮助,不再被时间困扰。
Das obige ist der detaillierte Inhalt vonEine Zusammenfassung der Python-Zeitkonvertierung, die Sie auf einmal erlernen können (sehr vollständig). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!