網站首頁 編程語言 正文
1 前言
在開發中經常會遇到查詢日期、時間、時間戳,或者日期比較等相關操作,為了方便以后使用,本文將對python操作時間的各種操作做出總結。
時間戳: 即以整型或浮點型表示的是一個以秒為單位的時間間隔。這個時間的基礎值是從1970年的1月1號零點開始算起。
2 datetime 模塊
此模塊常用類有:date、time、datetime、timedelta
導入:
from datetime import *
2.1 date類
獲取當前日期:
from datetime import *
dt = date.today()
print(dt) # 輸出:2022-09-07
print(dt.year) # 2022
print(dt.month)
print(dt.day)
# 返回星期幾 星期一 = 0
print(dt.weekday()) # 輸出:2
# 返回星期幾 星期一 = 1
print(dt.isoweekday()) # 0001-01-01
# 返回 ctime() 樣式字符串
print(dt.ctime()) # Wed Sep 7 00:00:00 2022
# 修改 年、月、日
print(dt.replace(year=2023)) # 輸出:2023-09-07
# 打印最大/最小日期
print(dt.max) # 9999-12-31
print(dt.min) # 0001-01-01
使用date類的構造函數,初始化變量
d = date(2022, 9, 6)
print(d) # 輸出:2022-09-06
字符串初始化為date
d = date.fromisoformat("2022-09-06")
print(d) # 2022-09-06
print(type(d)) # <class 'datetime.date'>
時間戳 轉 date對象
d = date.fromtimestamp(1662451516)
print(d) # 2022-09-06
date 轉 字符串
d = date.today()
str_date = d.isoformat()
print(str_date) # 2022-09-06 字符串
2.2 time類
from datetime import time
t1 = time(10, 20, 32)
print(t1) # 輸出:10:20:32
# 打印時分秒
print(t1.hour)
print(t1.minute)
print(t1.second)
# 將對象轉為字符串
res = time.isoformat(t1)
# print(t1.isoformat()) # 方式2
print(res) # 輸出:10:20:32
print(type(res)) # 輸出:<class 'str'>
2.3 datetime類
from datetime import datetime
# datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
t = datetime(2022, 9, 7, 20, 32, 20)
print(t)
# 打印 年月日 時分秒
print(t.year)
print(t.month)
print(t.day)
print(t.hour)
print(t.minute)
print(t.second)
# 獲取當前時間
today = datetime.now()
print(today)
# 字符串轉為datetime
d = datetime.fromisoformat("2022-09-10 12:25:36")
print(type(d)) # <class 'datetime.datetime'>
2.4 timedelta類
主要用于計算日期差異,或者日期相關操作
2.4.1 時間增加
from datetime import datetime, timedelta
now = datetime.now()
print(now)
# 加2天
# def __new__(cls, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
new_time = now + timedelta(days=2)
print(new_time.strftime("%Y-%m-%d %H:%M:%S"))
# 加1周
new_time = now + timedelta(weeks=1)
print(new_time.strftime("%Y-%m-%d %H:%M:%S"))
2.4.2 計算時間差
from datetime import datetime, date
# 計算時間差
now = datetime.now()
# 將字符串轉為<class 'datetime.datetime'>
d = datetime.fromisoformat("2022-09-10 12:25:36")
res = d - now
print(res)
print(res.days)
print(res.seconds)
2.5 datetime格式化
from datetime import datetime, date
now = datetime.now()
print(now)
print(now.strftime("%Y-%m-%d %H:%M:%S"))
print(now.strftime("%y-%m-%d %H:%M:%S %A"))
符號 | 描述 |
---|---|
%y | 兩位數的年份表示(00-99) |
%Y | 四位數的年份表示(0000-9999) |
%m | 月份(01-12) |
%d | 月內的天(0-31) |
%H | 24h值小時數(0-23) |
%I | 12小時小時數 |
%M | 分鐘數(00-59) |
%S | 秒(00-59) |
%a | 本地簡化星期名稱 |
%A | 本地完整星期名稱 |
%b | 本地簡化月份名稱 |
%B | 本地完整月份名稱 |
%c | 本地相應的日期表示和時間表示 |
%j | 年內的一天(001-366) |
%p | 本地A.M.或P.M.的等價符 |
%U | 一年中的星期數(00-53)星期天為星期的開始 |
%w | 星期(0-6),星期天為星期的開始 |
%W | 一年中的星期數(0-53)星期一位星期的開始 |
%x | 本地相應的日期表示 |
%X | 本地相應的事假表示 |
%Z | 當前時區的名稱 |
%% | %號本身 |
3 time 標準庫
元組表示法:以Python的數據結構表示,共有9個。
屬性 | 描述 |
---|---|
tm_year | 年 |
tm_mon | 月(1-12) |
tm_mday | 日(1-31) |
tm_hour | 時(0-23) |
tm_min | 分(0-59) |
tm_sec | 秒(0-59) |
tm_wday | 0-6(0表示周日) |
tm_yday | 1-366(一年中的第幾天) |
tm_isdst | 默認為-1(是否為夏令時) |
3.1 時間操作
import time
# 當前timestamp
timestamp = time.time()
print(timestamp)
# 時間戳 轉 時間元組
# 方式1:time.struct_time(tm_year=2022, tm_mon=9, tm_mday=10, tm_hour=16, tm_min=11, tm_sec=30, tm_wday=3, tm_yday=251, tm_isdst=0)
time_tuple1 = time.localtime()
# 方式2
time_tuple2 = time.localtime(timestamp)
print(time_tuple1)
print(time_tuple2)
# 時間元組 轉 時間戳
timestamp2 = time.mktime(time_tuple1)
print(timestamp2) # 1662624690.0
# 時間元組 格式化為 時間
strftime1 = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple1)
print(strftime1)
# 時間 格式化為 時間元組
time_tuple3 = time.strptime("2022-09-10 16:14:18", "%Y-%m-%d %H:%M:%S")
print(time_tuple3)
# 返回一個可讀的時間字符串
print(time.ctime()) # Thu Sep 10 16:17:40 2022
print(time.ctime(time.time())) # Thu Sep 10 16:17:40 2022
print(time.asctime())
print(time.asctime(time.localtime()))
3.2 程序睡眠
程序睡眠:
# 程序暫停/睡眠3s
time.sleep(3)
4 Calendar 日歷模塊
打印日歷:
import calendar
cal = calendar.month(2022,9)
print(cal) # str
"""
September 2022
Mo Tu We Th Fr Sa Su
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
"""
閏年相關:
import calendar
# 判斷是否為閏年
print(calendar.isleap(2000)) # True
print(calendar.isleap(2022)) # False
# 查看2個年份之間的閏年總和
print(calendar.leapdays(2008, 2060)) # 13
5 dateuil 日期模塊
安裝:
pip install dateutils
from datetime import datetime, date
from dateutil.relativedelta import relativedelta, MO, TU, WE, TH, FR, SA, SU
now = datetime.now()
today = date.today()
print(now)
print(today)
"""
時間增加
dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0,
hours=0, minutes=0, seconds=0, microseconds=0,
year=None, month=None, day=None, weekday=None,
yearday=None, nlyearday=None,
hour=None, minute=None, second=None, microsecond=None
"""
# 下個月
next_month = now + relativedelta(months=1)
print(next_month)
# 一年后 前一個月
next_year_prev_month = now + relativedelta(years=1, months=-1)
print(next_year_prev_month)
# 下周五(前提是今天為周六、周天)
next_fr = now + relativedelta(weekday=FR)
print(next_fr)
# 計算兩個日期差
res = relativedelta(date(2060, 6, 20), today)
print(res) # relativedelta(years=+37, months=+9, days=+12)
print(res.years) # 37
原文鏈接:https://blog.csdn.net/zx77588023/article/details/126726690
相關推薦
- 2022-01-04 圖片網絡地址轉base64和文件
- 2022-05-26 Python學習之文件的讀取詳解_python
- 2023-01-15 GoLang?RabbitMQ?TTL與死信隊列以及延遲隊列詳細講解_Golang
- 2022-05-13 C++ 減少臨時字符串對象的產生
- 2023-04-04 Golang利用casbin實現權限驗證詳解_Golang
- 2022-06-02 EasyX實現自由落體小球_C 語言
- 2022-07-27 詳解Python中的PyInputPlus模塊_python
- 2022-07-14 如何批量刪除Docker中已經停止的容器的幾種方法_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支