Python學習之——時間和日期

Python學習之——時間模塊

  • 參考
  • time 模塊
    • 常見接口
  • datetime 模塊
    • 常見接口
  • calendar 模塊
    • 常見接口
  • 示例

參考

Python datetime模塊詳解、示例
搞定Python時區的N種姿勢
calendar – 日歷相關

time 模塊

在Python中,通常有這幾種方式來表示時間:
1)時間戳
2)格式化的時間字符串
3)元組(struct_time)共九個元素。

UTC(Coordinated Universal Time,世界協調時):即格林威治天文時間,世界標準時間,在中國為UTC+8。
DST(Daylight Saving Time:即夏令時。
時間戳(timestamp):時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。
元組(struct_time):struct_time元組共有9個元素,返回struct_time的函數主要有gmtime(),localtime(),strptime()。
下面列出這種方式元組中的幾個元素:

索引(Index)屬性(Attribute)值(Values)
0tm_year(年)比如2011
1tm_mon(月)1 - 12
2tm_mday(日)1 - 31
3tm_hour(時)0 - 23
4tm_min(分)0 - 59
5tm_sec(秒)0 - 61
6tm_wday(weekday)0 - 6(0表示周日)
7tm_yday(一年中的第幾天)1 - 366
8tm_isdst(是否是夏令時)默認為-1

常見接口

import time# 返回當前UTC時間的時間戳(從1970年1月1日00:00:00開始按秒計算的偏移量)
time.time()# 和localtime()類似,gmtime()是將一個時間戳轉換為UTC-0時區的struct_time。
time.gmtime([secs])# 將一個時間戳轉換為當前本地時區的struct_time。secs參數未提供,返回當前本地時區的當前時間struct_time
time.localtime([secs])# localtime()的反函數,將一個struct_time轉化為時間戳。
# 參數是 struct_time 或者完整的9元組 ,注意參數是當前本地時區的struct_time,而不是UTC-0時區
time.mktime(t)# 把一個表示時間的struct_time或者完整的9元組轉化為格式化的時間字符串。
# 如果t未指定,將傳入time.localtime()
time.strftime(format[, t])# strftime()的逆操作, 把一個格式化時間字符串轉化為struct_time
time.strptime(string[, format])# 把一個表示時間的struct_time或者完整的9元組表示為:'Sat Dec  9 23:16:45 2023'。這種形式
# 如果沒有參數,將會將time.localtime()作為參數傳入
time.asctime([t])# 把一個時間戳轉化為time.asctime()的形式。
# 如果參數未給或者為None的時候,將會默認time.time()為參數
time.ctime([secs])# 線程推遲指定的時間運行,單位為秒。
time.sleep(secs)# 在UNIX系統上,clock()返回的是秒表示的時間戳
# 在WINDOWS中,第一次調用,返回的是進程運行的實際時間。而第二次之后的調用是自第一次調用以后到現在的運行時間。
time.clock()

示例

import time
print(f'time.time():{time.time()}')
print(f'time.gmtime():{time.gmtime()}')
print(f'time.localtime():{time.localtime()}')
print(f'time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime()):{time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime())}')
print(f'time.asctime:{time.asctime()}')# 結果
time.time():1702135670.389908
time.gmtime():time.struct_time(tm_year=2023, tm_mon=12, tm_mday=9, tm_hour=15, tm_min=27, tm_sec=50, tm_wday=5, tm_yday=343, tm_isdst=0)
time.localtime():time.struct_time(tm_year=2023, tm_mon=12, tm_mday=9, tm_hour=23, tm_min=27, tm_sec=50, tm_wday=5, tm_yday=343, tm_isdst=0)
time.strftime("%Y/%m/%d/ %H:%M:%S", time.localtime()):2023/12/09/ 23:27:50
time.asctime:Sat Dec  9 23:27:50 2023

datetime 模塊

python datetime time 時間模塊
搞定Python時區的N種姿勢

datetime模塊中包含如下類:

類名功能說明
date日期對象,常用的屬性有year, month, day
time時間對象
datetime日期時間對象,常用的屬性有hour, minute, second, microsecond
datetime_CAPI日期時間對象C語言接口
timedelta時間間隔,即兩個時間點之間的長度
tzinfo時區信息對象

datetime模塊中包含的常量

datetime.MAXYEAR	# 返回能表示的最大年份9999
datetime.MINYEAR    # 返回能表示的最小年份1

常見接口

from datetime import datetime, timedelta, tzinfo# 獲取當前utc-0時區的時間
datetime.utcnow()
# 由時間戳返回本地時間datetime
datetime.fromtimestamp
# 由時間戳返回utc時間datetime
datetime.utcfromtimestamp

calendar 模塊

calendar – 日歷相關
Python-標準庫calendar的使用
提供日歷功能

常見接口

import calendarif __name__ == "__main__":cc = calendar.Calendar(0)one_weekday = []for index, dt in enumerate(cc.itermonthdates(2023, 12)):if index != 0 and index % 7 == 0:print(''.join(one_weekday))one_weekday.clear()one_weekday.append(f'{dt} ')# 結果
2023-11-27 2023-11-28 2023-11-29 2023-11-30 2023-12-01 2023-12-02 2023-12-03
2023-12-04 2023-12-05 2023-12-06 2023-12-07 2023-12-08 2023-12-09 2023-12-10
2023-12-11 2023-12-12 2023-12-13 2023-12-14 2023-12-15 2023-12-16 2023-12-17
2023-12-18 2023-12-19 2023-12-20 2023-12-21 2023-12-22 2023-12-23 2023-12-24

示例

一些常見的時間轉換函數封裝

# -*- coding: utf-8 -*-
import time
from datetime import datetime, timezone, timedeltaTIME_FORMAT_STR = "%Y/%m/%d/ %H:%M:%S"
DAY_SECOND = 86400
HOUR_SECOND = 3600
MINUTE_SECOND = 60def datetime_to_str(datetime_obj: datetime, format_str=TIME_FORMAT_STR) -> str:return datetime_obj.strftime(format_str)def str_to_datetime(time_str: str, format_str=TIME_FORMAT_STR) -> datetime:return datetime.strptime(time_str, format_str)def datetime_to_timestamp(datetime_obj: datetime) -> float:return time.mktime(datetime_obj.timetuple())def timestamp_to_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:return time.strftime(format_str, time.localtime(timestamp))def str_to_timestamp(time_str: str, format_str=TIME_FORMAT_STR) -> float:"""time.gmtime([secs]): 將一個時間戳轉換為UTC-0時區的struct_time。time.localtime([secs]): 將一個時間戳轉換為當前時區的struct_time。secs參數未提供,則以當前時間為準time.mktime: localtime()的反函數,將一個struct_time轉化為時間戳,注意參數是使用本地時區的_TimeTuple | struct_time,而不是UTC-0時區"""datetime_obj: datetime = str_to_datetime(time_str, format_str)return time.mktime(datetime_obj.timetuple())def get_local_date_str(timestamp: float) -> str:"""將一個時間戳轉換為當前本地時區的日期字符串"""# 將一個時間戳轉換為當前時區的struct_timetime_struct: time.struct_time = time.localtime(int(timestamp))ret: str = time.strftime(TIME_FORMAT_STR, time_struct)return retdef get_local_date_str_custom1(timestamp: float, HMS_FMT="%H:%M:%S") -> str:time_struct: time.struct_time = time.localtime(int(timestamp))input_day = int(timestamp) / DAY_SECONDcur_day = int(time.time()) / DAY_SECONDif input_day == cur_day:return time.strftime(HMS_FMT, time_struct)else:return time.strftime(TIME_FORMAT_STR, time_struct)def get_now_time_str(is_local: bool = True, timezone_num: int = 0) -> str:if is_local:# 當前本地時區datetime_obj: datetime = datetime.now()else:# utc-0 時區# utc_0_datetime: datetime = datetime.utcnow()# timezone_num=0: utc-0 時區; timezone_num=2: utc-2 時區datetime_obj: datetime = datetime.now(timezone(timedelta(hours=timezone_num)))return datetime_to_str(datetime_obj)def timestamp_to_utc_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:"""時間戳轉utc-0時區的時間"""datetime_obj: datetime = datetime.utcfromtimestamp(timestamp)return datetime_obj.strftime(format_str)def timestamp_to_local_str(timestamp: float, format_str=TIME_FORMAT_STR) -> str:"""時間戳轉當前本地時區的時間"""datetime_obj: datetime = datetime.fromtimestamp(timestamp)return datetime_obj.strftime(format_str)def get_local_offst() -> timedelta:"""獲取當前時區相對UTC-0的偏移"""timestamp: float = time.time()local_datetime_obj: datetime = datetime.fromtimestamp(timestamp)utc0_datetime_obj: datetime = datetime.utcfromtimestamp(timestamp)offset: timedelta = local_datetime_obj - utc0_datetime_objreturn offsetdef seconds_to_left_str(input_seconds: float) -> str:"""秒數seconds轉剩余倒計時:XX時XX分XX秒https://www.runoob.com/python/att-string-format.html"""hours = 0minutes = 0seconds = 0input_seconds = int(input_seconds)if input_seconds >= 0:hours = int(input_seconds / HOUR_SECOND)minutes = int(input_seconds % HOUR_SECOND / MINUTE_SECOND)seconds = int(input_seconds % MINUTE_SECOND)# 例如:(100, 1, 10) ==> 100時01分10秒; (0, 0, 0) ==> 0時00分00秒return "{:0>d}時{:0>2d}分{:0>2d}秒".format(hours, minutes, seconds)if __name__ == "__main__":print(f'utc-0 time_str: {timestamp_to_utc_str(time.time())}')print(f'utc-local time_str: {timestamp_to_local_str(time.time())}')print(f'utc-0 time_str: {get_now_time_str(False, 0)}')print(f'utc-local time_str: {get_now_time_str()}')print(f'utc-local time_str:{get_local_date_str(time.time())}')print(f'utc-local offset:{get_local_offst()}')input_seconds = 6000print(f'{input_seconds} seconds==>{seconds_to_left_str(input_seconds)}')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

浮點數在計算機中如何存儲

舉例: 結果: 文字描述: 先將浮點數轉化為二進制的表示形式, 接著將其二進制的形式按照科學計數法來表示, 符號位的確定:正數0, 負數1 指數的確定:將其二進制表示成為科學計數法…

Fall in love with English

Fall in love with English 愛上英語 Hiding behind the loose dusty curtain, a teenager packed up his overcoat into the suitcase. 躲藏在布滿塵土的松軟的窗簾后邊,一個年輕人打包他的外套到行李箱中。 He planned to leave home at dusk though there was th…

超完整的mysql安裝配置方法(包含idea和navicat連接mysql,并實現建表)

mysql安裝配置方法 1、下載mysql2、解壓到指定的安裝目錄3、配置初始化文件my.ini4、配置用戶變量和系統變量5、初始化mysql6、安裝mysql服務并啟動修改密碼7、使用idea連接mysql8、使用Navicat可視化工具連接mysql,并實現新建數據庫,新建表 1、下載mysq…

計算機考研408-計算機網絡、操作系統整書知識點腦圖

計算機網絡、操作系統整書知識點腦圖 今天突然想起來考研期間為了方便記憶,費了很大力氣整理了計算機網絡、操作系統兩本書知識點的腦圖,想著放著也沒啥用,分享出來給大家看看 但是思維導圖格式的東西好像沒法直接發成文章,上傳…

【NodeJs】UniSMS 實現短信驗證碼

承接上文 ,上次用的是 短信寶平臺 認證已經通過 后續又新增要求 平臺相當麻煩! 短信寶實現短信發送要求: 1.平臺綁定手機號 必須和 營業執照法人一致 2.平臺個人實名認證 必須和 營業執照法人一致 3.平臺需要上傳營業執照 4.平臺需要上…

拒接服務攻擊(DOS)的初步介紹

文章目錄 什么是拒絕服務攻擊拒絕服務攻擊的過程拒絕服務攻擊的類型常見的拒絕服務攻擊如何防范拒絕服務攻擊分布式拒絕服務攻擊(DDoS) 什么是拒絕服務攻擊 拒絕服務攻擊是一種網絡攻擊方式,攻擊者通過向目標計算機系統或網絡發送大量的請求…

免費分享一套Springboot+Vue前后端分離的在線商城系統,挺實用的

大家好,我是java1234_小鋒老師,看到一個不錯的SpringbootVue前后端分離的在線商城系統,分享下哈。 項目視頻演示 【免費】SpringbootVue在線商城系統 畢業設計 Java畢業設計_嗶哩嗶哩_bilibili【免費】springbootvue在線商城系統 畢業設計 …

97基于matlab的改進的帶記憶的模擬退火算法求解TSP問題

基于matlab的改進的帶記憶的模擬退火算法求解TSP問題,采用多普勒型降溫曲線描述迭代過程,在傳統算法的基礎上增加記憶功能,可測試中國31/64/144以及att48城市的數據,也可自行輸入數據進行測試,測試結果基本達到當前最優…

Swagger2的使用

手寫Api文檔的幾個痛點: 文檔需要更新的時候,需要再次發送一份給前端,也就是文檔更新交流不及時。 接口返回結果不明確 不能直接在線測試接口,通常需要使用工具,比如postman 接口文檔太多,不好管理 Sw…

gin投票項目4

對應視頻v2版本 gin項目投票系統4 1.增加一個注冊賬號的功能 增加接口 參數校驗:(需求) 確認密碼需要一致,不為空用戶名必須唯一, 不為空用戶名大于8小于16位密碼大于8小于16位,并且不能為純數字 正則表達式 必須知道這東西…

我對遷移學習的一點理解(系列2)

文章目錄 我對遷移學習的一點理解 我對遷移學習的一點理解 源域和目標域是相對的概念,指的是在遷移學習任務中涉及到的兩個不同的數據集或領域。 源域(Source Domain)通常指的是已經進行過訓練和學習的數據集,它被用來提取特征、…

Nginx緩存及HTTPS配置小記

緩存基礎 緩存分類 某些場景下,Nginx需要通過worker到上有服務中獲取數據并將結果響應給客戶端,在高并發場景下,我們完全可以將這些數據視為熱點數據,并將其緩存到Nginx服務上。 客戶端緩存:將緩存數據放到客戶端。 …

yolov8與yolov5網絡對比

回顧一下YOLOv5,不然沒機會了 這里粗略回顧一下,這里直接提供YOLOv5的整理的結構圖吧: Backbone:CSPDarkNet結構,主要結構思想的體現在C3模塊,這里也是梯度分流的主要思想所在的地方;PAN-FPN&…

OFDM模糊函數仿真

文章目錄 前言一、OFDM 信號及模糊函數1、OFDM 信號表達式2、模糊函數表達式 二、MATLAB 仿真1、MATLAB 核心源碼2、仿真結果①、OFDM 模糊函數②、OFDM 距離模糊函數③、OFDM 速度模糊函數 前言 本文進行 OFDM 的仿真,首先看一下 OFDM 的模糊函數仿真效果&#xf…

【vim】常用操作

用的時候看看,記太多也沒用,下面都是最常用的,更多去查文檔vim指令集。 以下均為正常模式下面操作,正在編輯的,先etc一下. 1/拷貝當前行 yy,5yy為拷貝包含當前行往下五行 2/p將拷貝的東西粘貼到當前行下…

Nmap腳本的應用場景

網絡安全檢測和漏洞掃描 Nmap腳本是一種強大的工具,可以用于網絡安全檢測和漏洞掃描。在滲透測試工程師的角度下,本文將詳細闡述Nmap腳本的應用場景,以及如何使用Nmap腳本進行網絡安全檢測和漏洞掃描。 一、Nmap腳本的應用場景 Nmap腳本在滲…

Java、JDK、JRE、JVM

Java、JDK、JRE、JVM 一、 Java 廣義上看,Kotlin、JRuby等運行于Java虛擬機上的編程語言以及相關的程序都屬于Java體系的一員。從傳統意義上看,Java社區規定的Java技術體系包括以下幾個部分: Java程序設計語言各種硬件平臺上的Java虛擬機實…

vue的知識點

Vue.js是一個漸進式JavaScript框架,用于簡化Web應用程序開發和管理。下面是Vue.js的一些核心知識點: 1. 數據綁定:Vue.js通過指令和模板語法實現了雙向數據綁定,可以實時更新視圖和模型之間的數據。 2. 組件化開發:V…

【力扣】移除鏈表元素203

目錄 1.前言2. 題目描述3. 題目分析3.1 不帶哨兵位3.2 帶哨兵位 4. 附代碼4.1 不帶哨兵位4.2 帶哨兵位 1.前言 這里開始介紹從網上一些刷題網站上的題目,在這里做一些分享,和學習記錄。 先來介紹一些力扣的OJ題目。 這里的OJ就是我們不需要寫主函數&…

數據表記錄的操作

一、數據添加 1、打開SSMS,附加數據庫(數據庫文件在自己的文件夾下面),并進行下面的設置: (1)設置“部門信息”表中的“編號”為主鍵(SSMS) 首先建立好所需的數據庫庫…