目錄
1.1時間戳簡介" >1.1時間戳簡介
1.2時間戳轉換網站" >1.2時間戳轉換網站
3.1模組內容" >3.1模組內容
2.2calendar" >2.2calendar
2.3isleap(year)" >2.3isleap(year)
2.4leapdays(y1,y2)" >2.4leapdays(y1,y2)
2.5month(year,month,w=2,l=1)" >2.5month(year,month,w=2,l=1)
2.6monthcalendar(year,month)" >2.6monthcalendar(year,month)
2.7monthrange(year,month)" >2.7monthrange(year,month)
2.8weekday(y,m,d)" >2.8weekday(y,m,d)
3.time " >3.time
4.3time" >4.3time
#3.3localtime" >#3.3localtime
3.4gmtime" >3.4gmtime
3.5asctime" >3.5asctime
" >3.6ctime
3.7mktime" >3.7mktime
#3.8strftime" >#3.8strftime
4.datetime" >4.datetime
4.1模块内容" >4.1模块内容
4.2date" >4.2date
4.4datetime" >4.4datetime
4.5timedelta" >4.5timedelta
4.6tzinfo" >4.6tzinfo
5.常用时间转化 " >5.常用时间转化
5.1时间戳转成日期" >5.1时间戳转成日期
5.2日期时间转成时间戳" >5.2日期时间转成时间戳
5.3格式化时间" >5.3格式化时间
5.4指定格式获取当前时间" >5.4指定格式获取当前时间
首頁 後端開發 Python教學 一學就會的 Python 時間轉換總結(超全)

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

Aug 11, 2023 pm 04:12 PM
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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles