Python 日期與時間的處理
Python 日期與時間的處理¶
在 Python 中,常見處理日期與時間的套件,如下:
time
datetime
relativedelta
calendar
引用方式,如下:
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta
import calendar
time.time() 函數¶
- time.time() 可以傳回從 1970/1/1 00:00:00 算起至今的秒數:
In [1]:
# 匯入 time 模組
import time
# 從 1970/1/1 00:00:00 至今的秒數
seconds = time.time()
# 列印結果
print(seconds)
1613001756.3572578
- time.time() 通常是用來作為時間戳記,例如測量程式執行時間。
In [6]:
import time
# 紀錄起始時間
start_time = time.time()
# 撰寫程式,例如:迴圈執行
a = 0
for _ in range(10000000):
a += 1
# 紀錄結束時間
end_time = time.time()
# 將結束時間減去起始時間,等於執行時間
time_cost = end_time - start_time
# 顯示執行時間
print(f"Time Cost: {time_cost} seconds")
Time Cost: 0.8928589820861816 seconds
In [7]:
# 匯入 time 模組
import time
# 從 1970/1/1 00:00:00 至今的秒數
seconds = time.time()
# 將秒數轉為本地時間
local_time = time.ctime(seconds)
# 列印結果
print("本地時間:", local_time)
本地時間: Thu Feb 11 08:10:02 2021
- 如果不加任何參數,time.ctime() 會直接採用目前的時間:
In [8]:
# 匯入 time 模組
import time
# 現在時間
time_now = time.ctime()
# 列印結果
print("現在時間:", time_now)
現在時間: Thu Feb 11 08:11:11 2021
time.sleep() 函數¶
- time.sleep() 可以讓程式暫停指定的秒數:
In [9]:
# 匯入 time 模組
import time
print("Good")
# 暫停 2.5 秒
time.sleep(2.5)
print("morning")
Good morning
time.localtime() 函數¶
- time.localtime() 可以將 time.time() 所產生的秒數,轉換為 struct_time 格式的本地時間。
In [11]:
import time
# 轉換為 struct_time 格式的本地時間
st_datetime = time.localtime(1613001756)
# 列印結果
print("結果:", st_datetime)
結果: time.struct_time(tm_year=2021, tm_mon=2, tm_mday=11, tm_hour=8, tm_min=2, tm_sec=36, tm_wday=3, tm_yday=42, tm_isdst=0)
- struct_time 格式的好處就是可以直接取出日期或時間裡面的任意數值:
In [12]:
# 輸出日期與時間
print("年:", st_datetime.tm_year)
print("月:", st_datetime.tm_mon)
print("日:", st_datetime.tm_mday)
print("時:", st_datetime.tm_hour)
print("分:", st_datetime.tm_min)
print("秒:", st_datetime.tm_sec)
# 0 代表星期一 1 代表星期二 2 代表星期三 3 代表星期四 4 代表星期五 5 代表星期六 6 代表星期日
print("星期幾:", st_datetime.tm_wday)
年: 2021 月: 2 日: 11 時: 8 分: 2 秒: 36 星期幾: 3
time.gmtime() 函數¶
- time.gmtime() 函數的用途跟 time.localtime() 函數類似,只不過它傳回的時間是世界協調時間(UTC):
In [13]:
# 匯入 time 模組
import time
# 轉換為 struct_time 格式的本地時間
local_time = time.gmtime(1613001756)
# 列印結果
print("結果:", local_time)
結果: time.struct_time(tm_year=2021, tm_mon=2, tm_mday=11, tm_hour=0, tm_min=2, tm_sec=36, tm_wday=3, tm_yday=42, tm_isdst=0)
time.mktime() 函數¶
- time.mktime() 函數跟 time.localtime() 互為反函數,可將 struct_time 格式的時間轉為秒數:
In [15]:
# 匯入 time 模組
import time
# 將秒數轉換為 struct_time 格式
st_datetime = time.localtime(1613001756)
# 列印 struct_time 格式
print(st_datetime)
# 將 struct_time 格式轉換為秒數
seconds = time.mktime(st_datetime)
# 列印結果
print(seconds)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=11, tm_hour=8, tm_min=2, tm_sec=36, tm_wday=3, tm_yday=42, tm_isdst=0) 1613001756.0
time.asctime() 函數¶
- time.asctime() 函數可將 struct_time 格式的時間轉為文字:
In [16]:
# 匯入 time 模組
import time
# 將秒數轉換為 struct_time 格式
local_time = time.localtime(1613001756)
# 將 struct_time 格式轉換為文字
str_datetime = time.asctime(local_time)
# 列印結果
print(str_datetime)
Thu Feb 11 08:02:36 2021
time.strftime() 函數¶
- time.strftime() 函數可以依照指定的格式將 struct_time 時間資料轉換為文字輸出:
In [17]:
# 匯入 time 模組
import time
# 取得 struct_time 格式的時間
local_time = time.localtime()
# 依指定格式列印
format_datetime = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
# 列印結果
print(format_datetime)
2021-02-11 08:35:34
- 至於格式如何使用,請參考官方網站time.strftime。
Directive | Meaning | Notes |
---|---|---|
%a | 本地化的縮寫星期中每日的名稱。 | |
%A | 本地化的星期中每日的完整名稱。 | |
%b | 本地化的月縮寫名稱。 | |
%B | 本地化的月完整名稱。 | |
%c | 本地化的適當日期和時間表示。 | |
%d | 十二進制數[01,31]表示的月中日。 | |
%H | 十進制數[00,23]表示的小時(24小時制)。 | |
%I | 十二進制數[01,12]表示的小時(12小時制)。 | |
%j | 十二進制數[001,366]表示的年中日。 | |
%m | 十二進制數[01,12]表示的月。 | |
%M | 十二進制數[00,59]表示的分鐘。 | |
%p | 本地化的AM或PM。 | (1) |
%S | 十二進制數[00,61]表示的秒。 | (2) |
%U | 十進制數[00,53]表示的一年中的周數(星期日作為一周的第一天)。在第一個星期日之前的新年中的所有日子都被認為是在第0週。 | (3) |
%w | 十二進制數[0(星期日),6]表示的周中日。 | |
%W | 十進制數[00,53]表示的一年中的周數(星期一作為一周的第一天)。在第一個星期一之前的新年中的所有日子被認為是在第0週。 | (3) |
%x | 本地化的適當日期表示。 | |
%X | 本地化的適當時間表示。 | |
%y | 十二進制數[00,99]表示的沒有世紀的年份。 | |
%Y | 十進制數表示的帶世紀的年份。 | |
%z | 時區以以格式+ HHMM或-HHMM形式的UTC / GMT的正或負時差指示,其中H表示十進制小時數字,M表示小數分鐘數字[-23:59,+23:59]。 | |
%Z | 時區名稱(如果不存在時區,則不包含字符)。 | |
%% | 字面的'%'字符。 |
Notes:
- 當與strptime()函數一起使用時,如果使用%I指令來解析小時,%p指令只影響輸出小時時段。
- 範圍真的是0到61;值60在表示leap秒的正確中有效,並且由於歷史原因支持值61。
- 當與strptime()函數一起使用時,%U和%W僅用於指定星期幾和年份的計算。
time.strptime() 函數¶
- time.strptime() 函數則是跟 time.strftime() 函數相反,它是依據指定的格式,解析文字資料中的時間,輸出 struct_time 格式的時間:
In [19]:
# 匯入 time 模組
import time
# 文字資料
time_string = "2021-02-11 14:57:52"
# 依指定格式解析文字資料中的時間,輸出 struct_time 格式的時間
st_datetime = time.strptime(time_string, "%Y-%m-%d %H:%M:%S")
# 列印結果
print(st_datetime)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=11, tm_hour=14, tm_min=57, tm_sec=52, tm_wday=3, tm_yday=42, tm_isdst=-1)
Reference
- time 的詳細函數,請參考官方網站。
In [25]:
# 匯入 datetime 模組
from datetime import datetime
# 當前時間,datetime類型
dt_datetime = datetime.now()
# 時間戳,浮點類型
dt_timestamp = datetime.now().timestamp()
# 格式化日期對象 datetime,字串類型
str_datetime = datetime.strftime(dt_datetime, '%Y-%m-%d %H:%M:%S')
print("時間物件轉字串:", str_datetime)
# 字串轉日期對象
dt_new_datetime = datetime.strptime('2021-2-11 14:22:13', '%Y-%m-%d %H:%M:%S')
print("字串轉時間物件:", dt_new_datetime)
# 獲取本地時間,datetime類型
local_time = datetime.fromtimestamp(dt_timestamp)
print("用時間戳獲得本地時間:", local_time)
# 獲取UTC時間,datetime類型
utc_time = datetime.utcfromtimestamp(dt_timestamp)
print("用時間戳獲得UTC時間:", utc_time)
時間物件轉字串: 2021-02-11 09:15:25 字串轉時間物件: 2021-02-11 14:22:13 用時間戳獲得本地時間: 2021-02-11 09:15:25.687245 用時間戳獲得UTC時間: 2021-02-11 01:15:25.687245
獲取當前時間¶
In [29]:
from datetime import datetime
now_datetime = datetime.now()
# 列印當前時間至毫秒,這是列印時間物件
print(now_datetime)
# 將時間物件轉換成字串,再做格式化列印
print(datetime.strftime(now_datetime, '%Y-%m-%d %H:%M:%S'))
# 列印時間物件的型態
print(type(now_datetime))
2021-02-11 09:26:28.952818 2021-02-11 09:26:28 <class 'datetime.datetime'>
- strftime 用於格式化日期物件 datetime 成為字串。另外一個方法 strptime 則負責把一個字串 string 轉為 datetime 物件:
In [32]:
from datetime import datetime
dt_datetime = datetime.strptime('2021-2-11 14:22:13', '%Y-%m-%d %H:%M:%S')
# 列印轉換後的時間物件
print(dt_datetime)
# 列印轉換後時間物件的型態
print(type(dt_datetime))
2021-02-11 14:22:13 <class 'datetime.datetime'>
獲取時間戳¶
- 小數位表示毫秒數。
In [36]:
from datetime import datetime
import time
now_datetime = datetime.now()
print(now_datetime)
# datetime模組提供時間戳
print(now_datetime.timestamp())
# time模塊提供時間戳
print(time.time())
2021-02-11 09:32:37.913942 1613007157.913942 1613007157.9139423
自定義時間轉換為時間戳:¶
- 注意:timestamp的值是與時區無關的。datetime是有時區的。
In [37]:
from datetime import datetime
# 將字串轉時間物件,然後獲取時間戳
my_datetime = datetime.strptime('2021-2-11 14:29:20', '%Y-%m-%d %H:%M:%S')
print(my_datetime.timestamp())
# 直接建立時間物件,然後獲取時間戳
my_datetime = datetime(2021, 2, 11, 14, 29, 20)
print(my_datetime.timestamp())
1613024960.0 1613024960.0
時間戳轉日期¶
In [2]:
from datetime import datetime
# 先獲得當下的時間物件
now_datetime = datetime.now()
# 再透過時間物件取得時間戳
now_timestamp = now_datetime.timestamp()
# 列印本地時間
print(datetime.fromtimestamp(now_timestamp))
# 列印UTC時間
print(datetime.utcfromtimestamp(now_timestamp))
2021-02-11 09:42:02.922916 2021-02-11 01:42:02.922916
datetime加減¶
- 可以直接導入timedelta類實現日期加減:
In [6]:
from datetime import datetime, timedelta
# 獲得當下時間物件
now_datetime = datetime.now()
# 時間加上 10 小時
now_datetime += timedelta(hours=10)
# 時間加上 10 分鐘
now_datetime += timedelta(minutes=10)
# 時間加上 1 星期
now_datetime += timedelta(weeks=1)
# 時間減掉 1 天 1 小時 1 分鐘 10 秒
now_datetime += timedelta(days=-1, hours=1, minutes=1, seconds=10)
# 列印結果
print(now_datetime)
2021-02-17 21:14:13.389243
python中時間日期格式化符號¶
格式化字串 | 意義 |
---|---|
%y | 兩位數的年份表示(00-99) |
%Y | 四位數的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月內中的一天(0-31) |
%H | 24小時制小時數(0-23) |
%I | 12小時制小時數(01-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 | 一年中的星期數(00-53)星期一為星期的開始 |
%x | 本地相應的日期表示 |
%X | 本地相應的時間表示 |
%Z | 當前時區的名稱 |
%% | %號本身 |
主要說明使用 Python 3 取得現在的日期與時間,並且轉換為臺灣的時區¶
- 取得現在的時間
- 把時區轉換到東八區
- 格式化時間
In [5]:
from datetime import datetime,timezone,timedelta
# 取得UTC當下時間
dt_datetime1 = datetime.utcnow().replace(tzinfo=timezone.utc)
# 轉換時區 -> 東八區
dt_datetime2 = dt_datetime1.astimezone(timezone(timedelta(hours=8)))
# 列印 UTC 時間和 轉換後的時間
print('UTC \t%s\nUTC+8\t%s'%(dt_datetime1, dt_datetime2))
# 將時間轉換為 string
print(dt_datetime2.strftime("%Y-%m-%d %H:%M:%S"))
UTC 2021-02-11 01:55:15.187048+00:00 UTC+8 2021-02-11 09:55:15.187048+08:00 2021-02-11 09:55:15
timedelta() 與 relativedelta() 的差別¶
- timedelta()函數僅支持天和周參數
- relativedelta()函數可以支持年,月,日,週,時,分,秒的參數
In [10]:
from datetime import datetime
from datetime import timedelta
from dateutil.relativedelta import relativedelta
now_datetime = datetime.now()
print("now_datetime:", now_datetime)
# 減掉 24 個月
two_year_before = now_datetime - relativedelta(months=24)
# 列印兩年前
print(two_year_before)
print("*" * 10 + "timedelta" + "*" * 10)
# 加兩天
print(now_datetime + timedelta(days=2))
# 加一星期
print(now_datetime + timedelta(weeks=1))
print("*" * 10 + "relativedelta" + "*" * 10)
# 加一年
print(now_datetime + relativedelta(years=1))
# 加一個月
print(now_datetime + relativedelta(months=1))
# 加一天
print(now_datetime + relativedelta(days=1))
# 加一星期
print(now_datetime + relativedelta(weeks=1))
# 加一小時
print(now_datetime + relativedelta(hours=1))
# 加一分鐘
print(now_datetime + relativedelta(minutes=1))
# 加一秒鐘
print(now_datetime + relativedelta(seconds=1))
now_datetime: 2021-02-11 10:11:36.527660 2019-02-11 10:11:36.527660 **********timedelta********** 2021-02-13 10:11:36.527660 2021-02-18 10:11:36.527660 **********relativedelta********** 2022-02-11 10:11:36.527660 2021-03-11 10:11:36.527660 2021-02-12 10:11:36.527660 2021-02-18 10:11:36.527660 2021-02-11 11:11:36.527660 2021-02-11 10:12:36.527660 2021-02-11 10:11:37.527660
如何獲得每月的最後一天¶
calendar.monthrange(年,月)
預期兩個值:一個是當前的年份,另外一個是當前的月份
寫法可以是:calendar.monthrange(now.year,now.month)
返回兩個整數。
0-6 ==> 0(星期一)到6(星期日)第一個數值該月第一天所在的星期幾,對應的數字。
第二個值為該月一共幾天。
In [16]:
import calendar
# 先將當下時間物件轉字串
ds_month_end = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
# 將字串轉為時間物件
dt_month_end = datetime.strptime(ds_month_end, "%Y-%m-%d %H:%M:%S")
# 利用 calendar.monthrange(年, 月)[1] 取得每月最後一日的日期
dt_month_end = datetime(dt_month_end.year, dt_month_end.month,
calendar.monthrange(dt_month_end.year, dt_month_end.month)[1],
23, 59, 00)
# 列印結果
print(dt_month_end)
2021-02-28 23:59:00
獲取昨天日期¶
In [17]:
# 當下日期減一天
yesterday=datetime.now()-timedelta(days=1)
# 列印結果
print(yesterday)
2021-02-10 10:30:48.390637
獲取明天日期¶
In [18]:
# 當下日期加一天
tomorrow=datetime.now()+timedelta(days=1)
# 列印結果
print(tomorrow)
2021-02-12 10:33:02.410900
獲取本週第一天和最後一天¶
In [32]:
# 當下日期減去該星期
this_week_start = datetime.now() - timedelta(days = datetime.now().weekday())
# 當下日期加上剩下的星期數
this_week_end = datetime.now() + timedelta(days = 6 - datetime.now().weekday())
# 列印本周第一天和最後一天
print(f"Start Day: {this_week_start}, End Day: {this_week_end}")
Start Day: 2021-02-08 10:51:08.139415, End Day: 2021-02-14 10:51:08.139415
獲取上週第一天和最後一天¶
In [31]:
# 當下日期減去該星期加七天
last_week_start = datetime.now() - timedelta(days = datetime.now().weekday() + 7)
# 當下日期減去該星期加一天
last_week_end = datetime.now() - timedelta(days = datetime.now().weekday() + 1)
# 列印上周第一天和最後一天
print(f"Start Day: {last_week_start}, End Day: {last_week_end}")
Start Day: 2021-02-01 10:51:05.059655, End Day: 2021-02-07 10:51:05.059655
獲取本月第一天和最後一天¶
In [30]:
# 設定當下日期的年和月,日期設定為 1 號
this_month_start = datetime(datetime.now().year, datetime.now().month,1)
# 設定當下日期的年和月,利用 calendar.monthrange(年, 月)[1] 獲得當月的最後一天的日期
this_month_end = datetime(datetime.now().year, datetime.now().month,
calendar.monthrange(datetime.now().year, datetime.now().month)[1])
# 列印本月第一天和最後一天
print(f"Start Day: {last_week_start}, End Day: {last_week_end}")
Start Day: 2021-02-01 10:42:52.676869, End Day: 2021-02-07 10:42:52.676869
獲取上月第一天和最後一天¶
In [34]:
# 獲取上個月的最後一天,用當月份減一天
last_month_end = this_month_start-timedelta(days = 1)
# 設定上個月的年和月,日期設定為 1 號
last_month_start = datetime(last_month_end.year, last_month_end.month, 1)
# 列印上月第一天和最後一天
print(f"Start Day: {last_month_start}, End Day: {last_month_end}")
Start Day: 2021-01-01 00:00:00, End Day: 2021-01-31 00:00:00
獲取本季第一天和最後一天¶
In [54]:
# 計算每季的第一個月分
month = (datetime.now().month - 1) - (datetime.now().month - 1) % 3 + 1
# 獲取本季第一月份的第一天
this_quarter_start = datetime(datetime.now().year, month, 1)
# 獲取本季最後一個月份的最後一天
this_quarter_end = datetime(datetime.now().year, month + 2,
calendar.monthrange(datetime.now().year, month + 2)[1])
# 列印結果
print(f"Start Day: {this_quarter_start}, End Day: {this_quarter_end}")
Start Day: 2021-01-01 00:00:00, End Day: 2021-03-31 00:00:00
獲取上季第一天和最後一天¶
In [56]:
# 計算每季的第一個月分
month = (datetime.now().month - 1) - (datetime.now().month - 1) % 3 + 1
# 獲取本季第一月份的第一天
this_quarter_start = datetime(datetime.now().year, month, 1)
# 獲取上一季的最後一天
last_quarter_end = this_quarter_start - timedelta(days = 1)
# 用上一季最後一天的月份減二,即為上一季的第一個月份,日期設定為 1
last_quarter_start = datetime(last_quarter_end.year, last_quarter_end.month - 2, 1)
# 列印結果
print(f"Start Day: {last_quarter_start}, End Day: {last_quarter_end}")
Start Day: 2020-10-01 00:00:00, End Day: 2020-12-31 00:00:00
獲取本年第一天和最後一天¶
In [58]:
# 設定本年,而月跟日設定為 1
this_year_start = datetime(datetime.now().year, 1, 1)
# 設定當年度加 1 ,而後減一天,即為本年的最後一天
this_year_end = datetime(datetime.now().year + 1, 1, 1) - timedelta(days = 1)
# 列印結果
print(f"Start Day: {this_year_start}, End Day: {this_year_end}")
Start Day: 2021-01-01 00:00:00, End Day: 2021-12-31 00:00:00
獲取去年第一天和最後一天¶
In [3]:
from datetime import datetime,timezone,timedelta
# 設定本年,而月跟日設定為 1
this_year_start = datetime(datetime.now().year, 1, 1)
# 設定本年減一天,即為去年最後一天
last_year_end = this_year_start - timedelta(days = 1)
# 設定去年的年,並設定月和日為 1,即為去年第一天
last_year_start = datetime(last_year_end.year, 1, 1)
# 列印結果
print(f"Start Day: {last_year_start}, End Day: {last_year_end}")
Start Day: 2020-01-01 00:00:00, End Day: 2020-12-31 00:00:00
如何設定某區間日期,並且以每月份的方式逐一處理至結束日¶
In [4]:
# 匯入會用到的模組
from datetime import datetime
from dateutil.relativedelta import relativedelta
import calendar
# date_start 、 date_end 分別為起始日期和結束日期,由使用者自訂。
date_start = datetime.strptime("2021-02-15 11:11:11", "%Y-%m-%d %H:%M:%S")
date_end = datetime.strptime("2022-02-15 11:11:11", "%Y-%m-%d %H:%M:%S")
# 設定起始月份的日期,使用起始日期的年和月,日期設定為 1 號,時間歸零。
dt_month_start = datetime(date_start.year, date_start.month, 1, 0, 0, 0)
# 如果起始月份日期不等於使用者自訂的起始日期,則將起始月份設定為使用者設定的起始日期
if dt_month_start != date_start:
dt_month_start = date_start
# 設定結束月份日期,先使用起始日期的年和月,日期設為 1,時間設定為一天的最後時間
dt_month_end = datetime(date_start.year, date_start.month, 1, 23, 59, 0)
# 設定結束月份日期,使用結束月份日期的年和月,並用 calendar.monthrange(年, 月)找出該月最後一天的日期
dt_month_end = datetime(dt_month_end.year, dt_month_end.month,
calendar.monthrange(dt_month_end.year, dt_month_end.month)[1],
23, 59, 00)
# 初始旗標設為 False
flag_end = False
# 當 flag_end = True 時,代表所有區間日期都搜尋過了,藉由 not 將 True 轉為 False ,結束迴圈
while not flag_end:
try:
# 設定起始月份歸零
dt_month_start = dt_month_start + relativedelta(days=0, hour=0, minute=0, second=0)
# 設定結束月份為加上一個月
dt_month_end += relativedelta(months=1)
# 倘若結束日其加上一個月的月份減掉結束月份的月份等於零,則代表是最後一輪
if (dt_month_end + relativedelta(months=1)).month - date_end.month == 0:
# 將結束日期設定給結束月份
dt_month_end = date_end
# 因為是最後一輪,因此將旗標 Flag_end 設為 True
flag_end = True
# 其他情形
else:
# 結束月份等於起始月份的年和月,日期用 calendar.monthrange(年, 月)找該月最後一天,時間設為一天最後時間
dt_month_end = datetime(dt_month_start.year, dt_month_start.month,
calendar.monthrange(dt_month_start.year, dt_month_start.month)[1], 23, 59, 00)
finally:
# 列印起始月份和結束月份
print("Date of Processing: ", dt_month_start, "-", dt_month_end)
# 起始月份等於結束月份加上一天,進入到下個月的第一天
dt_month_start = dt_month_end + relativedelta(days=1, hour=0, minute=0, second=0)
Date of Processing: 2021-02-15 00:00:00 - 2021-02-28 23:59:00 Date of Processing: 2021-03-01 00:00:00 - 2021-03-31 23:59:00 Date of Processing: 2021-04-01 00:00:00 - 2021-04-30 23:59:00 Date of Processing: 2021-05-01 00:00:00 - 2021-05-31 23:59:00 Date of Processing: 2021-06-01 00:00:00 - 2021-06-30 23:59:00 Date of Processing: 2021-07-01 00:00:00 - 2021-07-31 23:59:00 Date of Processing: 2021-08-01 00:00:00 - 2021-08-31 23:59:00 Date of Processing: 2021-09-01 00:00:00 - 2021-09-30 23:59:00 Date of Processing: 2021-10-01 00:00:00 - 2021-10-31 23:59:00 Date of Processing: 2021-11-01 00:00:00 - 2021-11-30 23:59:00 Date of Processing: 2021-12-01 00:00:00 - 2021-12-31 23:59:00 Date of Processing: 2022-01-01 00:00:00 - 2022-02-15 11:11:11
Lai Tai-Yu (賴岱佑)
Comments
Post a Comment