時間的獲取及時間各格式間的轉(zhuǎn)換是比較常用的操作,但一是多種語言經(jīng)常容易弄混,二是同一種語言同一個功能可能有不同的實現(xiàn)函數(shù),導致每次處理時間經(jīng)常要百度所以來記錄一下。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的南和網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
另外個人真不喜歡同樣功能有多種寫法的形式,從理想角度說多種實現(xiàn)方式讓不同的人都能以其喜歡的方式進行編寫;但實際上當你忘記的時候,你就總要懷疑是不是這么寫、可不可以這么寫、到底怎么寫,然后到網(wǎng)上看又是五花八門的寫法,這是個很耗費精力的事情。這也是我不喜歡Ruby的原因。
1 獲取時間對象
import time
import datetime
# 獲取當前時間對象
# 返回形如datetime.datetime(2020, 2, 29, 10, 34, 36, )對象
# 可通過對象的year、month、day、hour、minute、second、microsecond、tzinfo等屬性獲取各部分的信
datetime.datetime.now()
datetime.datetime.today()
# 獲取昨天時間對象。當前時間減去一天的時間差即可
# 接受參數(shù)weeks,days,hours,seconds,minutes,microseconds,milliseconds,且可同時使用
# 返回形如datetime.datetime(2020, 2, 28, 10, 37, 31, )
datetime.datetime.now() - datetime.timedelta(days=1)
# 獲取明天時間對象。當天的時間加上一天的時間差即可
# 接受參數(shù)weeks,days,hours,seconds,minutes,microseconds,milliseconds,且可同時使用
# 返回形如datetime.datetime(2020, 3, 1, 10, 37, 31, )
datetime.datetime.now() - datetime.timedelta(days=1)
2 時間對象與給定格式轉(zhuǎn)換
import time
import datetime
# 時間對象輸出成指定格式
# 輸出形如2020-02-29 11:03:29(-空格和:等符號可以換成其他任意自己想要的字符)
obj = datetime.datetime.now()
obj.strftime("%Y-%m-%d %H:%M:%S")
obj.__format__("%Y-%m-%d %H:%M:%S")
# 給定時間轉(zhuǎn)成時間對象
datetime.datetime.strptime("2020-02-29 11:03:29", "%Y-%m-%d %H:%M:%S")
3 時間對象與時間戳轉(zhuǎn)換
import time
import datetime
# 時間對象轉(zhuǎn)成時間戳
# 結(jié)果形如.
obj = datetime.datetime.now()
obj.timestamp()
# 時間戳轉(zhuǎn)成時間對象
datetime.datetime.fromtimestamp(time.time())
4 時間的比較
import time
import datetime
# 單純地比較大小可以直接比較。
# 執(zhí)行太快了兩個對象是一樣的,所以睡眠一下
obj_a = datetime.datetime.now()
time.sleep(1)
obj_b = datetime.datetime.now()
if obj_b > obj_a:
print("yes")
# 要獲取具體時間差,可將轉(zhuǎn)成時間戳再相減
obj_a = datetime.datetime.now()
time.sleep(1)
obj_b = datetime.datetime.now()
if obj_b > obj_a:
late = obj_b.timestamp() - obj_a.timestamp()
print(f"obj_b is late than b: {late}")
1 基礎(chǔ)操作
# 獲取當前時間,并輸出成指定格式
# 有引號是因為有空格,沒有空格用不用引號都一樣
date +"%Y-%m-%d %H:%M:%S"
# 獲取昨天時間,并輸出成指定格式
date -d "yesterday" +"%Y-%m-%d %H:%M:%S"
date -d "last-day" +"%Y-%m-%d %H:%M:%S"
date -d "1 day ago" +"%Y-%m-%d %H:%M:%S"
date -d "-1 days" +"%Y-%m-%d %H:%M:%S"
# 獲取明天日期,并輸出成指定格式
date -d "tomorrow" +"%Y-%m-%d %H:%M:%S"
date -d "next-day" +"%Y-%m-%d %H:%M:%S"
date -d "+1 days" +"%Y-%m-%d %H:%M:%S"
# 將給定日期輸出成指定格式
date -d "2020-07-22 09:09:09" +"%H:%M:%S %Y-%m-%d"# 將timestamp轉(zhuǎn)成指定日期格式date -d @ +"%Y-%m-%d %H:%M:%S"
2 date月份設置成中/英文問題
%b表示以系統(tǒng)所設置語言的月份簡寫,如"Aug";%B當?shù)卣Z言全稱,如"August"。
但這個“系統(tǒng)設置語言”到底是由哪個配置設置呢?之前以為是LANG,LANG設置成"zh_CN.UTF-8"就是中文,date +"%b"就會輸出“8月”;設置成"en_US.UTF-8"就是英文,date +"%b"就會輸出“Aug”。
之前也收到反饋說LANG設置成了"en_US.UTF-8",date +"%b"仍輸出中文“8月”,并不太上心,但今天自己也遇到了這個情況。
通過查找資料和實驗,發(fā)現(xiàn)環(huán)境變量的優(yōu)先級是LC_ALL > LC_*(包括決定月分顯示語言的LC_TIME)> LANG。所以當LC_ALL設置成"zh_CN.UTF-8"時去設置LANG為"en_US.UTF-8",date +"%b"仍輸出中文。
# 月份以英文形式輸出。%b縮寫,%B全稱
LC_ALL=C date -d "2020-07-22 09:09:09" +"%b"
# 查看各影響編碼的環(huán)境變量的當前值
locale
# 查看系統(tǒng)支持的全部編碼
locale -a
1 MySQL獲取時間
'''
學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流群:
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
# 獲取當天日期
select curdate();
獲取昨天日期
select date_sub(curdate(),interval 1 day);
獲取明天日期
select date_sub(curdate(),interval -1 day);
# 獲取當前時間
select now();
# 獲取一個小前時間
select date_sub(now(),interval 1 hour);
# 獲取一個小時后時間
select date_sub(now(),interval -1 hour);
# 獲取昨天時間
select date_sub(now(),interval 1 day);
# 獲取明天時間
select date_sub(now(),interval -1 day);
2 時間輸出成指定格式
# 當前時間輸出成給定格式
select date_format(now(),"%Y%m%d %H:%i:%S");
# 給定時間輸出成指定格式
select date_format(date_sub(curdate(),interval 1 day),"%Y%m%d");
select date_format(date_sub(now(),interval 1 hour),"%Y%m%d %H:%i:%S");
3 獲取時間戳
select unix_timestamp(now());
Python、Shell、MySQL之間格式雖然大多是相同的,但小部分還是有區(qū)別,自己使用時要注意。比如分鐘Python和Shell是"%H",但MySQL是"%i"。