深圳網(wǎng)站建設(shè)公司 交通如何推廣app更高效
目錄
- 基礎(chǔ)知識
- 時間格式有哪些?
- Python中的時間格式化
- 時間戳
- datetime
- date
- datetime
- timedelta
- time
- 常用
- 獲取今天凌晨字符串?
- 將一個時間格式的字符串轉(zhuǎn)為時間戳
- 將一個時間戳轉(zhuǎn)為指定格式的字符串
- 全部代碼
- 參考
基礎(chǔ)知識
時間格式有哪些?
- 「格林威治標(biāo)準(zhǔn)時間」(Greenwich Mean Time,簡稱G.M.T.)以倫敦格林威治的子午線為基線,以地球自轉(zhuǎn)為標(biāo)準(zhǔn),全球都以此標(biāo)準(zhǔn)設(shè)定時間。
- 世界協(xié)調(diào)時(Coordinated Universal Time,簡稱UTC)又稱世界標(biāo)準(zhǔn)時間或世界協(xié)調(diào)時間,是最主要的世界時間標(biāo)準(zhǔn),在時刻上盡量接近于格林尼治標(biāo)準(zhǔn)時間。對于大多數(shù)用途來說,UTC時間被認(rèn)為能與GMT時間互換,基本相等,但GMT時間已不再被科學(xué)界所確定
- 中國標(biāo)準(zhǔn)時間(CST):中國大陸、中國香港、中國澳門、中國臺灣、蒙古國、新加坡、馬來西亞、菲律賓、西澳大利亞州的時間與UTC的時差均為+8,也就是UTC+8
- ISO 8601 標(biāo)準(zhǔn)時間:在 ISO 8601 的表示中,日期和時間按照這樣的順序排列:大的單位(比如年)放在左邊,小的單位依次往右排列。表示只能由阿拉伯?dāng)?shù)字和指定的特殊字符(比如"-“, “:”, “T”, “W”, “Z”)等組成,這樣的話,日常常用的描述性的單詞(比如"January”, “Thursday”, or “New Year’s Day”)是不允許使用的
Python中的時間格式化
日期時間格式是指轉(zhuǎn)為字符串時的格式化,可以自定義,有很多種,常見的有
- UTC時間格式:“yyyy-mm-ddThh:mm:ssZ”,在Python中是"%Y-%m-%dT%H:%M:%SZ"
- 本地時間格式:“yyyy-mm-dd hh:mm:ss”,在Python中是"%Y-%m-%d %H:%M:%S"
- 漢字表示格式:“yyyy年mm月dd日 hh時mm分ss秒”,在Python中是“%Y年%m月%d日 %H時%M分%S秒”
指令 | 含意 | 示例 | 備注 |
---|---|---|---|
| 當(dāng)?shù)毓ぷ魅盏目s寫。 | Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) | (1) |
| 本地化的星期中每日的完整名稱。 | Sunday, Monday, ..., Saturday (en_US); Sonntag, Montag, ..., Samstag (de_DE) | (1) |
| 以十進(jìn)制數(shù)顯示的工作日,其中0表示星期日,6表示星期六。 | 0, 1, ..., 6 | |
| 補(bǔ)零后,以十進(jìn)制數(shù)顯示的月份中的一天。 | 01, 02, ..., 31 | (9) |
| 當(dāng)?shù)卦路莸目s寫。 | Jan, Feb, ..., Dec (en_US); Jan, Feb, ..., Dez (de_DE) | (1) |
| 本地化的月份全名。 | January, February, ..., December (en_US); Januar, Februar, ..., Dezember (de_DE) | (1) |
| 補(bǔ)零后,以十進(jìn)制數(shù)顯示的月份。 | 01, 02, ..., 12 | (9) |
| 補(bǔ)零后,以十進(jìn)制數(shù)表示的,不帶世紀(jì)的年份。 | 00, 01, ..., 99 | (9) |
| 十進(jìn)制數(shù)表示的帶世紀(jì)的年份。 | 0001, 0002, ..., 2013, 2014, ..., 9998, 9999 | (2) |
| 以補(bǔ)零后的十進(jìn)制數(shù)表示的小時(24 小時制)。 | 00, 01, ..., 23 | (9) |
| 以補(bǔ)零后的十進(jìn)制數(shù)表示的小時(12 小時制)。 | 01, 02, ..., 12 | (9) |
| 本地化的 AM 或 PM 。 | AM, PM (en_US); am, pm (de_DE) | (1), (3) |
| 補(bǔ)零后,以十進(jìn)制數(shù)顯示的分鐘。 | 00, 01, ..., 59 | (9) |
| 補(bǔ)零后,以十進(jìn)制數(shù)顯示的秒。 | 00, 01, ..., 59 | (4), (9) |
| 微秒作為一個十進(jìn)制數(shù),零填充到 6 位。 | 000000, 000001, ..., 999999 | (5) |
| UTC 偏移量,格式為 | (空), +0000, -0400, +1030, +063415, -030712.345216 | (6) |
| 時區(qū)名稱(如果對象為簡單型則為空字符串)。 | (空), UTC, GMT | (6) |
| 以補(bǔ)零后的十進(jìn)制數(shù)表示的一年中的日序號。 | 001, 002, ..., 366 | (9) |
| 以補(bǔ)零后的十進(jìn)制數(shù)表示的一年中的周序號(星期日作為每周的第一天)。 在新的一年中第一個星期日之前的所有日子都被視為是在第 0 周。 | 00, 01, ..., 53 | (7), (9) |
| 以補(bǔ)零后的十進(jìn)制數(shù)表示的一年中的周序號(星期一作為每周的第一天)。 在新的一年中第一個星期一之前的所有日子都被視為是在第 0 周。 | 00, 01, ..., 53 | (7), (9) |
| 本地化的適當(dāng)日期和時間表示。 | Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) | (1) |
| 本地化的適當(dāng)日期表示。 | 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE) | (1) |
| 本地化的適當(dāng)時間表示。 | 21:30:00 (en_US); 21:30:00 (de_DE) | (1) |
| 字面的 | % |
時間戳
時間戳一般指的是Unix時間/POSIX時間,從1970-01-01 00:00:00到當(dāng)前的秒數(shù),一般使用10位或13表示
datetime
date
屬性(只讀)
- year:int類型,如2023
- month:int類型,如2
- day::int類型,如21
方法
- today:返回當(dāng)前日期,轉(zhuǎn)字符串使用iso格式,例如 2023-02-21
- fromtimestamp:從時間戳返回當(dāng)?shù)貢r間
- replace:返回一個date,可以通過參數(shù)修改year month day,會進(jìn)行檢查,不符合拋異常ValueError
- strftime:按照格式返回字符串
datetime
屬性(只讀)
- year:int類型,如2023
- month:int類型,如2
- day:int類型,如21
- hour:int類型,小時
- minute:int類型,分鐘
- second:int類型,秒
- microsecond:int類型,毫秒
方法
- today、now:返回本地當(dāng)前日期時間,例如,2023-02-21 21:09:07.915277
- utcnow:返回utc時間,即北京時間的8個小時前
- timestamp
- fromtimestamp:從時間戳獲取本地時間
- utcfromtimestamp:從時間戳獲取utc時間
- date:返回日期對象
- time:返回時間對象
- replace:返回一個datetime對象,可通過參數(shù)修改,會進(jìn)行檢查,不符合拋異常ValueError
- strftime:按照格式返回字符串
- strptime:返回一個對應(yīng)于 date_string,根據(jù) format 進(jìn)行解析得到的 datetime 對象。
timedelta
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 用于表示兩個時間的間隔
用這個就比較方便,比如,計算昨天,自己寫的話還要考慮月份的天數(shù),這個直接減去即可
time
方法
- time:返回時間戳,float類型
- localtime:獲得時間元組,secs參數(shù)可選,接受float
- mktime:這是 localtime() 的反函數(shù),時間參數(shù)t,返回對應(yīng)的一個float值
- sleep:程序睡眠,secs參數(shù)代表睡眠秒數(shù)
- strftime:返回指定format格式的字符串,t參數(shù)可選,默認(rèn)為localtime返回的值
- strptime:將string按照指定格式解析,返回一個時間元組
常用
我們常常收到和發(fā)送的都是字符串,這里就以字符串處理為例
獲取今天凌晨字符串?
def get_today_format(format="%Y-%m-%d 00:00:00"):str_time = datetime.today().strftime(format)return str_time
默認(rèn)返回今天凌晨的字符串,可以修改格式
將一個時間格式的字符串轉(zhuǎn)為時間戳
def get_time_stamp(str_time,format="%Y-%m-%dT%H:%M:%SZ") -> float:s_t = time.strptime(str_time,format)mkt = time.mktime(s_t) * 1000return mktdef get_date_time_stamp(str_time,format="%Y-%m-%dT%H:%M:%SZ") -> float:date_time = datetime.strptime(str_time,format)time_stamp = date_time.timestamp()*1000return time_stamp
將一個時間戳轉(zhuǎn)為指定格式的字符串
def get_str_by_timestamp(timestamp=time.time(),format="%Y-%m-%d %H:%M:%S"):time_tuple = time.localtime(float(timestamp))str_time = time.strftime(format,time_tuple)return str_time
全部代碼
from datetime import date,datetime,timedelta
import timelocal_format = "%Y-%m-%d %H:%M:%S"
utc_format = "%Y-%m-%dT%H:%M:%SZ"
chinese_format = "%Y年%m月%d日 %H時%M分%S秒"def date_test():year,month,day = date.today().year,date.today().month,date.today().dayprint(type(year),year,month,day)today = date.today()print(type(today), str(today))timestamp = date.today().fromtimestamp(datetime.now().timestamp())print(timestamp)today_but_28 = date.today().replace(day=28)print(today_but_28)today_format = today.strftime("%Y/%m/%d")print(today_format)date_time_format = datetime.strptime(today_format,"%Y/%m/%d")print(date_time_format)def datetime_test():today,now = datetime.today(),datetime.now()print(type(today),today,now)year,month,day= now.year,now.month,now.dayhour, minute, second = now.hour,now.minute,now.secondprint(type(year),year,month,day)print(type(hour),hour,minute,second)utcnow = datetime.utcnow()print(utcnow)date,time = now.date(),now.time()print(type(date),date)print(type(time),time)today_but_28 = now.replace(day=28,minute=59)print(today_but_28)today_format = now.strftime("%Y/%m/%d %H:%M:%S")print(today_format)def time_delta_test():one_day,one_hour = timedelta(days=1),timedelta(hours=1)yesterday_same_time = datetime.now() - one_dayone_hour_later = datetime.now() + one_hourprint(yesterday_same_time)print(one_hour_later)def time_test():time_stamp_float = time.time()print(time_stamp_float)s = time.localtime(time_stamp_float)print(s)time_float = time.mktime(s)print(time_float)local_str = time.strftime(local_format)print(local_str)default_format_time = time.strptime(local_str,local_format)print(default_format_time)time.sleep(1)def get_today_format(format="%Y-%m-%d 00:00:00"):str_time = datetime.today().strftime(format)return str_timedef get_time_stamp(str_time,format="%Y-%m-%dT%H:%M:%SZ") -> float:s_t = time.strptime(str_time,format)mkt = time.mktime(s_t) * 1000return mktdef get_date_time_stamp(str_time,format="%Y-%m-%dT%H:%M:%SZ") -> float:date_time = datetime.strptime(str_time,format)time_stamp = date_time.timestamp()*1000return time_stampdef get_str_by_timestamp(timestamp=time.time(),format="%Y-%m-%d %H:%M:%S"):time_tuple = time.localtime(float(timestamp))str_time = time.strftime(format,time_tuple)return str_timedef main():# date_test()# datetime_test()# time_delta_test()# time_test()# print(get_today_format())# print(get_time_stamp('2023-02-17T11:30:52Z'))# print(get_date_time_stamp('2023-02-17T11:30:52Z'))print(get_str_by_timestamp())if __name__ == '__main__':main()
截圖如下:
思考:
- 使用datetime包完成 將一個時間戳轉(zhuǎn)為指定格式的字符串
- 如何寫一個函數(shù),獲取當(dāng)前本地時間減去一個時間間隔的utc格式的字符串?
- 如何寫一個函數(shù),將時間格式字符串轉(zhuǎn)為另一時間格式字符串?
參考
python - datetime
python - time
GMT、UTC、ISO、CST、timestamp 等格式
在線時間戳轉(zhuǎn)換工具