Python時間time、datetime、date之間轉換,獲取今天、昨天、上週、上月、去年的時間

一、time、datetime、date之間轉換

    概念: 首先需要理解三個名詞: 時間戳(int), 時間數組, 日期格式(str)

    utc time : 國際時間(倫敦時間)

    localtime: 本地時間時間(如北京時間 = 倫敦時間 + 8小時)

    國際時間獲取: time.gmtime()     datetime.datetime.utcnow()

    本地時間獲取: time.localtime()    datetime.datetime.now()

import time

# 1.時間戳(本地)
s = time.time()
print('時間戳:', s)
>> 1540975769.3088


# 2.時間數組
time_array = time.localtime()              # localtime
time_array2 = time.gmtime()                # utc time
print('本地時間數組:', time_array)
print('utc時間數組:', time_array2)
>> 本地時間數組: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=31, tm_hour=16, tm_min=50, tm_sec=53, tm_wday=2, tm_yday=304, tm_isdst=0)


# 3.日期格式(str)
dt = time.strftime('%Y-%m-%d %H:%M:%S', time_array)
print('日期格式(str):', dt)
>> 日期格式(str): 2018-10-31 16:50:53

 

1、時間戳轉日期(秒 -> 數組 -> 日期):  time.strftime()  類似 datetime.datetime.strftime()
        s = 1540878671       # 單位: s; 也就是隻有10位數,超過將無法轉化
        array = time.gmtime(s)
        dt = time.strftime('%Y-%m-%d %H:%M:%S', array)
        print("時間戳轉化的日期:", dt)
     >> 時間戳轉化的日期:2018-10-30 08:51:11

 

2、日期轉時間戳(日期 -> 數組 -> 秒):  time.strptime()  類似 datetime.datetime.strptime()
       dt = '2018-10-30 08:51:11'
       array = time.strptime(dt, '%Y-%m-%d %H:%M:%S')
       s = time.mktime(array)
       print("日期轉化的時間戳:", s)
     >>日期轉化的時間戳:1540860671.0

     
二、分別獲取今天、昨天、上週、上月、去年的此刻時間

      首先安裝: pip  install python-dateutil

     相差天數函數: datetime.timedelta(days=1)  

    相差月份函數:relativedelta(months=1)

from dateutil.relativedelta import relativedelta
import datetime

today = datetime.date.today()                                 # 今天
yesterday = today - datetime.timedelta(days=1)                # 昨天
Lastweek = today - datetime.timedelta(days=7)                 # 上週
Nearly_month = today - datetime.timedelta(days=30)             # 前30天
Last_month = datetime.date.today() - relativedelta(months=1)   # 上月
Last_year = datetime.date.today() - relativedelta(months=12)   # 去年

    上述獲取到的結果爲<class 'datetime date'>,

     轉化爲日期格式(str):  datetime.date.strftime(Last_year, '%Y-%m-%d')

 

Demo:

   輸入年月日,得知其爲當年的第幾天?

 今天日期減去年12月31日的日期即可

import datetime
  
y = int(input('請輸入4位數字的年份:'))          #  獲取年份
m = int(input('請輸入月份:'))                 # 獲取月份
d = int(input('請輸入是哪一天:'))             # 獲取“日”
  
targetDay = datetime.date(y, m, d)                                 # 將輸入的日期格式化成標準的日期
dayCount = targetDay - datetime.date(targetDay.year - 1, 12, 31)   # 減去上一年最後一天
print('%s是%s年的第%s天。'% (targetDay, y, dayCount.days))

 

---------------------------------------------更新 2019-9-27 14:56:18--------------------------------------------------

1.獲取時區,獲取指定時區時間

import pytz
import datetime

print(pytz.country_timezones('cn'))  # 查詢中國所擁有的時區
print(pytz.country_timezones('us'))  # 查詢美國所擁有的時區
tz = pytz.timezone('Asia/Shanghai')

# datetime.datetime.now()方法 需要傳遞一個時區,如果不傳,就默認是當前用戶所在時區
# 得到指定時區的當前時間,然後並將時間進行格式化
user_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
print(user_time)

2.帶T時間字符串轉換

from datetime import datetime
s = '2020-02-21T03:56:03.755Z'
ret1 = datetime.strptime(s, "%Y-%m-%dT%H:%M:%S.%fZ")
ret2 = datetime.date(ret1)
print(ret1)
print(ret2)
>> 2020-02-21 03:56:03.755000
>> 2020-02-21

3.輸入日期區間列出所有區間內所有日期

def date_range(self, beginDate, endDate):
    import datetime
    dates = []
    dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
    date = beginDate[:]
    while date <= endDate:
        dates.append(date)
        dt = dt + datetime.timedelta(1)
        date = dt.strftime("%Y-%m-%d")
    return dates
        

ret = date_range("2020-01-10", "2020-01-20")
    
        

4.字符串時間 加減時間天數

import datetime
enddate = '2020-04-08'
dt = datetime.datetime.strptime(enddate, "%Y-%m-%d") + datetime.timedelta(1)
print('dt:', dt)
print('dt-day:', dt.date())

>> dt: 2020-04-09 00: 00:00
>> dt-day: 2020-04-09

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章