Pythonにおける日付操作

Pythonにおける日付操作

この記事ではPythonにおける日付操作について説明します。

YouTube Video

Pythonにおける日付操作

Pythonでの日付操作には主にdatetimeモジュールを使用します。このモジュールは、日付および時刻を操作するためのさまざまなクラスや関数を提供しています。

以下に、datetimeモジュールを使用した基本的な日付操作の例をいくつか示します。

日付と時刻の取得

現在の日付や時刻は次のように取得できます。datetime.now()datetime.today()はほぼ同じ結果を返しますが、タイムゾーンの扱いでは違いが出る場合があります。

1from datetime import datetime
2
3# Get the current date and time
4now = datetime.now()
5print(f"Current date and time: {now}")
6
7# Get today's date only
8today = datetime.today()
9print(f"Today's date: {today.date()}")
  • このコードは現在の日時と、今日の日付のみを取得して表示します。

特定の日付や時刻の作成

特定の日付や時刻の作成は、次のように行えます。

1from datetime import datetime
2
3# Create a specific date and time
4specific_date = datetime(2023, 11, 7, 10, 30, 45)
5print(f"Specified date and time: {specific_date}")
  • このコードは、指定した日時(2023年11月7日10時30分45秒)を作成して表示します。

日付のフォーマット

日付のフォーマットは、次のように行えます。

1from datetime import datetime
2
3now = datetime.now()
4
5# Format the date
6formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
7print(f"Formatted date and time: {formatted_date}")
  • このコードは、現在の日時を取得し、strftimeで所定の形式にフォーマットして表示します。

日付のフォーマット文字列

  • %Y: 西暦(4桁)
  • %m: 月(01から12)
  • %d: 日(01から31)
  • %H: 時(00から23)
  • %M: 分(00から59)
  • %S: 秒(00から59)

日付文字列の解析

日付を表す文字列をdatetimeオブジェクトに変換できます。

1from datetime import datetime
2
3date_string = "2023-11-07 10:30:45"
4parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
5print(f"Parsed date and time: {parsed_date}")
  • このコードは、文字列で表された日付をstrptime()を使ってdatetimeオブジェクトに変換し、表示します。

日付の演算

日付の演算は、次のように行えます。

 1from datetime import datetime, timedelta
 2
 3now = datetime.now()
 4
 5# Date for one day later
 6tomorrow = now + timedelta(days=1)
 7print(f"Date for one day later: {tomorrow}")
 8
 9# Date for one week ago
10last_week = now - timedelta(weeks=1)
11print(f"Date for one week ago: {last_week}")
12
13# Time for two hours later
14in_two_hours = now + timedelta(hours=2)
15print(f"Time for two hours later: {in_two_hours}")
  • このコードは、timedeltaを使って現在の日時から日付や時刻を加算または減算し、明日、一週間前、二時間後の日時を計算して表示します。

タイムゾーンの扱い

datetimeモジュールで、タイムゾーンを扱うこともできます。

 1from datetime import datetime, timezone, timedelta
 2
 3# Current UTC time
 4utc_now = datetime.now(timezone.utc)
 5print(f"Current UTC time: {utc_now}")
 6
 7# JST (UTC+9)
 8jst = timezone(timedelta(hours=9))
 9jst_now = datetime.now(jst)
10print(f"Current JST time: {jst_now}")
  • datetimeはデフォルトで「タイムゾーンなし(naive datetime)」を返します。timezoneクラスやzoneinfoを利用することでタイムゾーンを明示的に扱えます。

dateクラスとtimeクラス

datetimeモジュールでは、日付のみや時刻のみを扱うこともできます。

1from datetime import date, time
2
3d = date(2023, 11, 7)
4t = time(10, 30, 45)
5
6print(f"Date only: {d}")
7print(f"Time only: {t}")
  • dateクラスは日付のみ、timeクラスは時刻のみを扱います。

datetimetimestampの変換

UNIXタイムスタンプとdatetimeオブジェクトの相互変換が可能です。ここで、UNIXタイムスタンプとは1970年1月1日からの経過秒数です。

 1from datetime import datetime
 2
 3now = datetime.now()
 4
 5# datetime → timestamp
 6timestamp = now.timestamp()
 7print(f"Timestamp: {timestamp}")
 8
 9# timestamp → datetime
10restored = datetime.fromtimestamp(timestamp)
11print(f"Restored datetime: {restored}")
  • このコードは、現在の日時をUNIXタイムスタンプに変換し、fromtimestamp()関数で、そのタイムスタンプを再びdatetimeオブジェクトへ変換しています。

よくある落とし穴

datetimeモジュールを利用する際、次の点に注意できます。

  • datetime.now()はタイムゾーンを考慮しないため、国際化対応ではtimezone.utcを明示的に使う必要があります。
  • フォーマット文字列では、%m(月)と%M(分)を混同しやすいため注意が必要です。

まとめ

datetimeモジュールは、他にも日付と時刻を柔軟に操作するための多くの機能を提供しています。また、datetimetimedeltaといった他のクラスも用意されており、特定の操作に特化しています。

他のライブラリを使うことでも、より高度な日付操作が可能です。例えば、pandasは時系列データの操作に特化しており、dateutilは複雑な日付解析に適しています。また、arrowライブラリも便利です。

YouTubeチャンネルでは、Visual Studio Codeを用いて上記の記事を見ながら確認できます。 ぜひYouTubeチャンネルもご覧ください。

YouTube Video