搜尋
首頁後端開發Python教學一學就會的 Python 時間轉換總結(超全)


在生活和工作中,我們每個人每天都在和時間#打交道:

  • 早上什麼時候起床?

  • 地鐵幾分鐘來一趟?

  • 中午什麼時候開始午休?

  • 明天是星期幾?

  • 距離上次買衣服已經2個月呢?

  • 領導者讓我為程式碼加上一個定時任務的功能,怎麼辦?

不同的情況會遇到不同的時間問題:具體時間點、時間間隔、星期等,無時不刻我們在和時間碰撞。本文將利用Python對時間相關的類,及其方法與屬性等進行詳細的講解

一學就會的 Python 時間轉換總結(超全)

#1. 時間戳

1.1時間戳簡介

在正式講解時間的相關函數之前,我們必須先一個概念:時間戳#。本文中特指unix時間戳記。

時間戳Timestamp是指在一連串的資料中加入辨識文字,如時間或日期等,用以保障本地資料更新順序和遠端的一致。

unix時間戳記是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。 1970-01-01就是常常我們在MySQL中時間為空的時候,轉換空的時間戳之後所得到的時間。一小時表示為UNIX時間戳記格式為:3600秒;一天表示為UNIX時間戳記為86400秒,閏秒不計算。具體的對照表如下:

一學就會的 Python 時間轉換總結(超全)

1.2時間戳轉換網站

下面介紹幾個時間戳記和具體時間之間相互轉換的網站:

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

2.calendar

calendar的中文意思是"日曆",所以它其實適合進行日期,尤其是以日曆的形式展示。

2.1模組內容

一學就會的 Python 時間轉換總結(超全)

#以下舉例說明:

2.2calendar

我們顯示即將過去2020年的行事曆,使用預設的參數:

import calendar
year = calendar.calendar(2020)
print(year)

一學就會的 Python 時間轉換總結(超全)

改變參數再來顯示一次:

year = calendar.calendar(2020,w=3,l=1,c=8)
print(year)

一學就會的 Python 時間轉換總結(超全)

#我們發現整個行事曆變寬了,而且星期的英文也是3個字母來顯示的,解釋一下3個參數的意義:

  • c:每月間隔距離

  • w:每日寬度間隔

  • l:每週行數

其中每行長度為:21*w 18 2*c,3個月一行

#最後,看看即將到來的2021年日曆:

一學就會的 Python 時間轉換總結(超全)

2.3isleap(year)

此函數的作用是判斷某個年份到底是不是閏年。如果是則回傳True,否則回傳的是False。

普通年份能夠被4整除,但是不能被100整除,稱之為普通閏年

年份是整百數的,必須能夠被400整除,稱之為世紀閏年

一學就會的 Python 時間轉換總結(超全)

2.4leapdays(y1,y2)

判斷兩個年份之間有多少個閏年,包含y1,但不包含y2,類似Python切片中的包含頭部不包含尾部

#
一學就會的 Python 時間轉換總結(超全)

2.5month(year,month,w=2,l=1)

該函數傳回的是year年的month月的日曆,只有兩行​​標題,一週一行。每日間隔寬度為w個字符,每行的長度為7*w 6,其中l是每星期的行數

首先看看預設效果;

一學就會的 Python 時間轉換總結(超全)

接下來我們改變w和l兩個參數:

1、改變#w,我們發現星期的表示變成了3個字母;同時每天之間的間隔變寬了(左右間隔)

一學就會的 Python 時間轉換總結(超全)

2、改變參數l,我們發現每個星期之前的間隔(上下)變寬了

一學就會的 Python 時間轉換總結(超全)

2.6monthcalendar(year,month)

透過清單的形式傳回year年month月的行事曆,列表中還是列表形式。每個子清單是一個星期。 如果沒有本月的日期則用0表示。每個子列表都是從星期1開始的,特點概括如下:

  • 每個子列表代表的是一個星期

  • 從星期一到星期日,沒有出現在本月的日期用0代替

#我們還是以2020年12月份為例:

一學就會的 Python 時間轉換總結(超全)

和上面的日曆進行對比,我們發現:出現0的位置的確是沒有出現在12月份中

我們再看看2020年3月份的日曆:

一學就會的 Python 時間轉換總結(超全)

2.7monthrange(year,month)

該函數傳回的結果是一個元組,元組中有兩個數值(a,b)

  • 數值a代表​​的是該月從星期幾開始;規定6代表星期天,取值為0-6

  • 數值b代表該月總共有多少天

#透過一個例子來講解,還是以2020年12月份為例:

一學就會的 Python 時間轉換總結(超全)

結果中的1表示12月份從星期2開始(0-6,6代表星期日),該月總共31天

2.8weekday(y,m,d)

weekday方法是輸入年月日,我們便可知道這天是星期幾;回傳值是0-6, 0代表星期1,6代表星期日

透過一個例子來講解,以12月12號為例:

一學就會的 Python 時間轉換總結(超全)

雙12是星期六,回來的結果是5,5代表的就是星期六,剛好吻合。

3.time

time模組是涉及時間功能中最常用的一個模組,在Python的相關時間需求中常會用到,以下具體講解該模組的使用方法。

3.1模組內容

先看模組的整體使用

一學就會的 Python 時間轉換總結(超全)

3.2time

#time.time()是取得目前的時間,更嚴格地說,是獲取當前時間的時間戳記

再次理解時間戳:它是以1970年1月1日0時0份0秒為計時起點,計算到目前的時間長度(不考慮閏秒)

一學就會的 Python 時間轉換總結(超全)

#3.3localtime

#time.localtime列印目前的時間,得到的結果是時間元組,具體意義:

#筆記:結果是時間元組

一學就會的 Python 時間轉換總結(超全)

##time.localtime的參數預設是time.time()的時間戳,可以自行輸入某個時間戳記來取得其對應的時間

  • 預設目前時間戳

  • 指定某個時間戳記

一學就會的 Python 時間轉換總結(超全)

3.4gmtime

#localtime()得到的是本地時間,如果需要國際化,使用gmtime(),最好是使用格林威治時間。

格林威治標準時間:位於英國倫敦郊區的皇家格林威治天文台的標準時間,本初子午線經過那裡。

一學就會的 Python 時間轉換總結(超全)

3.5asctime

#time.asctime的參數為空時,預設是以time.localtime的值為參數,得到目前的日期、時間、星期;另外,我們也可以自己設定參數,參數是時間元組

  • ##使用目前時間的預設時間元組localtime

  • #自己指定一個時間元組

一學就會的 Python 時間轉換總結(超全)
取得目前時間的特定時間和日期:

一學就會的 Python 時間轉換總結(超全)

3.6ctime

ctime的參數預設是時間戳記;如果沒有,也可以指定時間戳

一學就會的 Python 時間轉換總結(超全)

3.7mktime

#mktime()也是以時間元組為參數的,它回傳的是時間戳,相當於是localtime的逆向過程

一學就會的 Python 時間轉換總結(超全)

#3.8strftime

一學就會的 Python 時間轉換總結(超全)

  • ##strftime()

    是依照我們指定的格式
  • 將時間元組轉換為字串
;如果不指定時間元組,預設是目前時間
localtime()一學就會的 Python 時間轉換總結(超全)。常用到的時間格式請見下表:

我們舉例說明:

##字串中的分隔符號我們可以任意指定
  • 可以同時顯示年月日時分秒等
  • # #######3.9strptime############strptime()###是將字串轉換為時間元組,我們需要特別注意的是,它有兩個參數: ###############待轉換的字串###################時間字串對應的格式,格式就是上面?表中提到的######
一學就會的 Python 時間轉換總結(超全)

4.datetime

#雖然time模組已經能夠解決很多的問題,但是實際工作和業務需求中需要更多的工具,讓我們使用起來更方便和快捷,datetime便是其中一個很好用的模組。 datetime模組中幾個常用的類別如下:

  • date:日期類,常用屬性:year/month/day

  • time:時間類,常用屬性:hour/minute/second/microsecond

  • datetime:日期時間類別

  • timedelta:時間間隔,即兩個時間點之間的時間長度

  • tzinfo:時區類別

4.1模块内容

一學就會的 Python 時間轉換總結(超全)

一學就會的 Python 時間轉換總結(超全)


4.2date

首先我们引入date类,并创建一个日期对象:

一學就會的 Python 時間轉換總結(超全)

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类中时间和时间戳的转换:

一學就會的 Python 時間轉換總結(超全)

具体时间的时间戳转成日期:

一學就會的 Python 時間轉換總結(超全)

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方法

一學就會的 Python 時間轉換總結(超全)

4.3time

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

4.4datetime

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

4.5timedelta

timedelta对象表示的是一个时间段,即两个日期date或者日期时间datetime之间的差;支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds

一學就會的 Python 時間轉換總結(超全)

一學就會的 Python 時間轉換總結(超全)

4.6tzinfo

本地时间指的是我们系统本身设定时区的时间,例如中国处于北京时间,常说的东八区UTC+8:00datetime类有一个时区属性tzinfo

tzinfo是一个关于时区信息的类,是一个抽象的基类,不能直接被实例化来使用。它的默认值是None,无法区分具体是哪个时区,需要我们强制指定一个之后才能使用。

一學就會的 Python 時間轉換總結(超全)

因为本身系统的时区刚好在中国处于东八区,所以上述代码是能够正常运行的,结果也是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

一學就會的 Python 時間轉換總結(超全)

5.常用时间转化

下面介绍几个工作中用到的时间转化小技巧:

  1. 时间戳转日期

  2. 日期转时间戳

  3. 格式化时间

  4. 指定格式获取当前时间

5.1时间戳转成日期

时间戳转成具体时间,我们需要两个函数:

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

5.2日期时间转成时间戳

日期时间转成时间戳格式,我们需要使用两个方法:

  • 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

一學就會的 Python 時間轉換總結(超全)

5.3格式化时间

工作需求中有时候给定的时间格式未必是我们能够直接使用,所以可能需要进行格式的转换,需要使用两个方法:

  • 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

一學就會的 Python 時間轉換總結(超全)

5.4指定格式获取当前时间

为了能够获取到指定格式的当前时间,我们分为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

6.总结

本文通过各种案例详细介绍了Python中关于时间输出和转化的3个模块:calendar、time、datetime,最后总结了4个工作中常用的时间转化技巧,希望对大家掌握Python中的时间输出和转化有所帮助,不再被时间困扰。

以上是一學就會的 Python 時間轉換總結(超全)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:Python当打之年。如有侵權,請聯絡admin@php.cn刪除
Python的主要目的:靈活性和易用性Python的主要目的:靈活性和易用性Apr 17, 2025 am 12:14 AM

Python的靈活性體現在多範式支持和動態類型系統,易用性則源於語法簡潔和豐富的標準庫。 1.靈活性:支持面向對象、函數式和過程式編程,動態類型系統提高開發效率。 2.易用性:語法接近自然語言,標準庫涵蓋廣泛功能,簡化開發過程。

Python:多功能編程的力量Python:多功能編程的力量Apr 17, 2025 am 12:09 AM

Python因其簡潔與強大而備受青睞,適用於從初學者到高級開發者的各種需求。其多功能性體現在:1)易學易用,語法簡單;2)豐富的庫和框架,如NumPy、Pandas等;3)跨平台支持,可在多種操作系統上運行;4)適合腳本和自動化任務,提升工作效率。

每天2小時學習Python:實用指南每天2小時學習Python:實用指南Apr 17, 2025 am 12:05 AM

可以,在每天花費兩個小時的時間內學會Python。 1.制定合理的學習計劃,2.選擇合適的學習資源,3.通過實踐鞏固所學知識,這些步驟能幫助你在短時間內掌握Python。

Python與C:開發人員的利弊Python與C:開發人員的利弊Apr 17, 2025 am 12:04 AM

Python適合快速開發和數據處理,而C 適合高性能和底層控制。 1)Python易用,語法簡潔,適用於數據科學和Web開發。 2)C 性能高,控制精確,常用於遊戲和系統編程。

Python:時間投入和學習步伐Python:時間投入和學習步伐Apr 17, 2025 am 12:03 AM

學習Python所需時間因人而異,主要受之前的編程經驗、學習動機、學習資源和方法及學習節奏的影響。設定現實的學習目標並通過實踐項目學習效果最佳。

Python:自動化,腳本和任務管理Python:自動化,腳本和任務管理Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境