[Python教學] 日期時間

2023/11/28閱讀時間約 16 分鐘

日期時間

python 日期時間

python 日期時間


時間日期在計算機科學和日常生活中都非常重要。下面是一些時間日期的基本概念和相關信息:

  1. 時間:時間是一個連續的概念,用來衡量事件發生的順序和持續的時間。時間通常以不同的單位來表示,包括秒、分鐘、小時、天、月和年等。
  2. 日期:日期是時間的一個特定點,通常包括年、月和日。日期用於確定事件或行動發生的具體時間。
  3. 時間戳記:時間戳記是一個數字或代碼,表示特定時刻或日期的瞬時值。在計算機科學中,它通常表示為從某一固定時間點(例如1970年1月1日)經過的秒數,這種表示方式稱為「Unix 時間戳記」。
  4. 時區:地球分為多個不同的時區,每個時區都有自己的標準時間。時區用來協調不同地區的時間,以便在全球范圍內統一時間表示。
  5. 日曆系統:不同的文化和地區使用不同的日曆系統,用來計算日期。一些常見的日曆系統包括格里高利曆(西曆)、夏威夷曆、伊斯蘭曆、農曆等。
  6. 日期和時間的表示:在計算機程式中,日期和時間通常以字符串或特殊的日期時間對象來表示。常見的日期和時間表示方式包括 ISO 8601 格式(例如 "2023-11-10" 表示2023年11月10日)、24小時制時間(例如 "15:30:00" 表示下午3點30分)等。
  7. 日期和時間的操作:在計算機程式中,您可以進行各種日期和時間的操作,包括計算日期之間的差值、格式化日期和時間、轉換不同時區的時間等。

這些是時間日期的一些基本概念和相關信息。在實際應用中,根據需要,您可以使用不同的工具和方法來處理日期和時間。

UTC 協調世界時

UTC(協調世界時)是一種全球性的標準時間,用於協調世界各地的時間。它是一個基於原子時鐘的時間標準,通常被視為世界上的參考時間。以下是有關UTC的一些重要信息:

  1. UTC 的含義
    • UTC 是一個不帶時區偏移的時間標準,也稱為GMT(格林尼治平均時間)的後繼者。
    • UTC 的名稱源自法語中的 "Temps Universel Coordonné",意思是"協調世界時"。
    • UTC 不考慮夏令時調整,因此它是穩定的,不會因夏令時變化而改變。
  2. UTC 的用途
    • UTC 通常用於全球性的時間標準,例如計算全球性的通信、科學實驗、航空和航海、計算時間間隔等。
    • 許多計算機系統和網絡通信協議使用UTC作為時間基準,以確保跨時區的一致性。
  3. UTC 的表示
    • UTC 的表示格式通常是以 "HH:MM:SS" 的形式表示,其中HH表示小時、MM表示分鐘、SS表示秒。
    • 日期和時間的結合可以使用 "YYYY-MM-DDTHH:MM:SS" 的格式,例如 "2023-11-10T15:30:00" 表示UTC時間的日期和時間。
  4. UTC 和時區
    • UTC 是一個統一的時間標準,不包括時區信息。它通常被視為時區的參考點。
    • 若要表示特定時區的時間,您需要將UTC時間轉換為該時區,並考慮該時區的時區偏移。
  5. UTC 的獲取
    • 您可以使用計算機或行動設備的系統時鐘獲取當前的UTC時間。
    • 在程式中,您可以使用相關的程式語言和庫來獲取和操作UTC時間。

UTC是全球性的時間標準,確保了全球範圍內的時間一致性。在許多情況下,特別是與跨時區的通信、科學實驗和計算機系統相關的應用中,UTC時間非常重要。

台灣位於UTC+8時區,也稱為台北標準時間(Taipei Standard Time,簡稱TST),或者又被稱為中華民國標準時間(ROC Standard Time),時區代號為「CST」。UTC+8表示台灣的時間比協調世界時(UTC)提前8小時,所以當UTC時間是中午12:00時,台灣的時間是晚上8:00時。台灣不遵循夏令時制度,所以在整年內都保持UTC+8時區。


Datetime 模組

datetime 模組是 Python 中用於處理日期和時間的標準庫模組。它提供了各種功能,允許您創建、操作和格式化日期時間物件。以下是 datetim 模組的主要功能和介紹:


日期和時間物件

datetime 模組定義了幾個重要的類別,包括 datetime.datedatetime.time 和 datetime.datetime。這些類別允許您分別表示日期、時間和日期時間。


創建日期時間物件

您可以使用 datetime 模組來創建日期時間物件,例如:

from datetime import datetime
# 創建一個表示當前日期時間的物件
now = datetime.now()
# datetime.datetime(2023, 11, 14, 9, 57, 23, 172582)


日期和時間格式化

datetime 模組允許您將日期時間物件格式化為字串,或將字串解析為日期時間物件。您可以使用strftime() 方法將日期時間格式化為字串。strptime() 方法將字串解析為日期時間物件。

from datetime import datetime

# 格式化日期時間為字串
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
# 2023-11-14 09:57:55

# 解析字串為日期時間物件
date_string = "2023-11-10 15:30:00"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
# datetime.datetime(2023, 11, 10, 15, 30)


日期時間運算

您可以執行日期時間的各種數學運算,如加法和減法,以計算日期時間的差值或在日期時間上進行操作。

from datetime import datetime, timedelta

# 計算未來某一天的日期
now = datetime.now()
# datetime.datetime(2023, 11, 14, 9, 58, 42, 120398)

future_date = now + timedelta(days=7)
# datetime.datetime(2023, 11, 21, 9, 58, 42, 120398)


時區支援

datetime 模組允許您處理時區相關的日期時間操作。

from datetime import datetime

# 獲取當前UTC時間
utc_now = datetime.utcnow()
datetime.datetime(2023, 11, 14, 1, 59, 18, 337317)

# 印出UTC時間
print("當前UTC時間:", utc_now)
# 當前UTC時間: 2023-11-14 01:59:18.337317


日期時間比較

您可以比較日期時間物件,以判斷哪個日期時間更早或更晚。

from datetime import datetime

# 比較日期時間物件
date1 = datetime(2023, 11, 10)
date2 = datetime(2023, 11, 15)

if date1 < date2:
print("date1 在 date2 之前")


獲取當前日期時間

您可以使用 datetime.now() 方法獲取當前的日期時間物件,以進行各種日期時間操作。

from datetime import datetime

# 獲取當前日期時間
now = datetime.now()


總之,datetime 模組為 Python 提供了強大的日期時間處理能力,可以方便地進行日期時間的創建、格式化、運算和比較等操作。這些功能使它在許多應用中都非常有用,包括時間戳記記錄、日曆應用程式、數據分析等。


常用方法

Datetime 常用方法

Datetime 常用方法

timedelta 時間差異

timedelta(時間差異)是 Python 中用於表示時間間隔的類別。它允許您執行日期和時間的數學運算,例如加法、減法和比較,用於處理時間間隔非常方便。以下是有關 timedelta 的重要資訊:

timedelta 物件

    • timedelta 是 datetime 模組中的一個類別,用於表示時間間隔。
    • 您可以使用 timedelta 物件表示一段時間的長度,例如幾天、幾小時、幾分鐘或幾秒。


創建 timedelta 物件

    • 您可以使用 timedelta 建構函式來創建 timedelta 物件,並指定要表示的時間間隔的各個組成部分,如天、小時、分鐘、秒等。
from datetime import timedelta

# 創建一個表示3天的時間間隔
delta = timedelta(days=3)
# datetime.timedelta(days=3)

# 創建一個表示2小時30分鐘的時間間隔
delta2 = timedelta(hours=2, minutes=30)
# datetime.timedelta(seconds=9000)


時間間隔運算

    • 您可以對 timedelta 物件執行各種數學運算,如加法和減法,以計算時間間隔的和或差。
from datetime import timedelta

# 創建兩個時間間隔物件
delta1 = timedelta(days=3)
delta2 = timedelta(days=2)

# 計算時間間隔的和
result = delta1 + delta2
# datetime.timedelta(days=5)

# 計算時間間隔的差
result2 = delta1 - delta2
# datetime.timedelta(days=1)


比較時間間隔

    • 您也可以比較 timedelta 物件,以判斷哪個時間間隔較長或較短。
pythonCopy code
from datetime import timedelta

delta1 = timedelta(days=3)
delta2 = timedelta(days=2)

if delta1 > delta2:
print("delta1 較長")


格式化輸出

    • 您可以將 timedelta 物件格式化為字串,以便以易讀的方式顯示時間間隔。
pythonCopy code
from datetime import timedelta

delta = timedelta(days=3, hours=2, minutes=30)
formatted = str(delta)
# '3 days, 2:30:00

timedelta 物件非常實用,可用於各種需要處理時間間隔的情況,例如計算日期之間的差異、計算任務的執行時間等。它是 Python 中處理時間間隔的標準工具。


參數說明

timedelta 參數說明

timedelta 參數說明



calendar 日曆

calendar 模組是 Python 中的標準庫之一,用於處理日期和時間相關的操作。它提供了各種與日曆和日期計算相關的函數和類別,允許您執行各種日期和時間操作。以下是有關 calendar 模組的一些介紹:


匯入 calendar 模組

    • 要使用 calendar 模組,首先需要匯入它:
import calendar


獲取日曆信息

    • calendar 模組允許您獲取各種有關日曆的信息,如某年某月的月曆、某年的年曆等。
    • 例如,您可以使用 calendar.month() 函數來獲取指定年份和月份的月曆:
import calendar

year = 2023
month = 11
cal = calendar.month(year, month)
print(cal)


日期範圍和工具函數

    • calendar 模組還提供了用於處理日期範圍和日期計算的工具函數,如 calendar.monthrange() 和 calendar.weekday() 等。
    • 例如,calendar.monthrange() 函數用於獲取指定年份和月份的第一天是星期幾以及該月的天數:
import calendar

year = 2023
month = 11
first_weekday, num_days = calendar.monthrange(year, month)
# first_weekday=2, num_days=30

這將返回第一天是星期幾(0 表示星期一,6 表示星期日)以及該月的天數。

常數

    • calendar 模組還定義了一些與日期和星期相關的常數,如星期一到星期日的名稱和月份的名稱等。
    • 例如,您可以使用 calendar.SUNDAYcalendar.MONDAY 等常數來表示星期幾。


calendar 模組在處理日期和時間方面是非常有用的工具,特別是在生成日曆、計算日期範圍和執行日期計算等任務時。通過結合使用 calendar 模組的函數和常數,您可以輕鬆執行各種日期和時間操作。


應用範例

以下是一個有趣的日期應用小遊戲,稱為「生日星期猜猜樂」。玩家需要猜測特定日期的星期,並檢查答案的正確性。

from datetime import datetime
import random

# 產生隨機的日期
def generate_random_date():
year = random.randint(1950, 2023)
month = random.randint(1, 12)
day = random.randint(1, 28) # 簡化起見,假設最大為28日
return datetime(year, month, day)

# 獲取日期的星期
def get_weekday(date):
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
return weekdays[date.weekday()]

# 主要遊戲循環
def birthday_game():
print("歡迎來到生日星期猜猜樂!")
correct_answers = 0
total_questions = 5 # 您可以根據需要更改問題數量

for _ in range(total_questions):
random_date = generate_random_date()
print(f"請猜測 {random_date.year}{random_date.month}{random_date.day}日是星期幾:")
user_guess = input("輸入星期幾(例:星期一):")

correct_weekday = get_weekday(random_date)

if user_guess == correct_weekday:
print("正確答案!\n")
correct_answers += 1
else:
print(f"錯誤答案。正確答案是 {correct_weekday}。\n")

print(f"您在 {total_questions} 個問題中答對了 {correct_answers} 個問題!")

if __name__ == "__main__":
birthday_game()

遊戲會隨機生成日期,然後要求玩家猜測該日期是星期幾。玩家將在幾個問題中回答正確的次數,最終會得到一個分數。您可以根據需要自定義遊戲的難度和問題數量。這個小遊戲可以讓您玩得開心,同時也提供了練習猜測星期的機會。


結論

日期時間在平常資料處理很常使用到,內建提供的 Datetime、calendar 模組可以處理大部分的問題,在撰寫系統時,有時候時區也是很大的一個雷,尤其是你的系統是多國在使用,就需要更特別注意。

10會員
16內容數
最近當一個講師,把自己會的技能分享出去, 從平常工作就在使用的Python開始教學 我會陸續把資料分享上來,希望可以透過教學相長的方式,互相學習進步。 教學單元有Colab介紹與使用、ChatGPT助教、變數與資料型態、IF判斷式、List清單、For迴圈、字典與集合、函式與模組、Class類別與物件、標準函示庫與套件
留言0
查看全部
發表第一個留言支持創作者!