Pythonの日付と時刻の基本!datetimeモジュールの型・定数・主要メソッドを徹底解説
Pythonで日付や時刻を操作するには、標準ライブラリのdatetimeモジュールを使用します。このモジュールには、日付・時刻オブジェクトとして「naive(ナイーブ)」と「aware(アウェア)」という2種類のタイプが存在します。
naive(ナイーブ)オブジェクトは、他の日時オブジェクトと明確に区別するために必要な情報(タイムゾーン情報など)を十分に持たないオブジェクトです。UTC(協定世界時)やローカル時刻といった基準を明示的に含まないため、その意味はプログラマー自身が管理する必要があります。
aware(アウェア)オブジェクトは、夏時間(DST)などのアルゴリズム的・政治的な時刻調整に関する情報を持ち、特定の時点を正確に表現するために使用されます。
モジュールのインポート方法
このモジュールを使用するには、まず以下のようにインポートします。
import datetime
datetimeモジュールには、さまざまなクラス・定数・メソッドが用意されています。
datetimeモジュールの定数
| 番号 | 定数と説明 |
|---|---|
| 1 | datetime.MINYEAR dateオブジェクトやdatetimeオブジェクトで表現できる最小の年。値は1です。 |
| 2 | datetime.MAXYEAR dateオブジェクトやdatetimeオブジェクトで表現できる最大の年。値は9999です。 |
利用可能なデータ型
| 番号 | データ型と説明 |
|---|---|
| 1 | date 日付を表すオブジェクト。グレゴリオ暦を使用し、year(年)、month(月)、day(日)の属性を持ちます。 |
| 2 | time 時刻を表すオブジェクトクラス。特定の日付に依存せず、hour(時)、minute(分)、second(秒)、microsecond(マイクロ秒)、tzinfo(タイムゾーン情報)の属性を持ちます。 |
| 3 | datetime 日付と時刻を組み合わせたオブジェクトです。 |
| 4 | timedelta 2つの日付・時刻・datetime値の差(期間)を表現するために使用されます。 |
| 5 | tzinfo タイムゾーン情報を保持する抽象基底クラス(ABC)。datetimeクラスおよびtimeクラスから利用されます。 |
| 6 | timezone tzinfoを実装したクラスで、UTCからの固定オフセットを持ちます。 |
dateオブジェクトとは
dateオブジェクトは「年・月・日」からなる日付を表します。グレゴリオ暦に基づいており、西暦1年1月1日を「1日目」として数えます。
以下に、dateオブジェクトに関連する主なメソッドを紹介します。
date(year, month, day)
dateオブジェクトを生成するコンストラクタです。引数はすべて整数型で指定する必要があり、年はMINYEAR〜MAXYEARの範囲内である必要があります。無効な日付を指定するとValueErrorが発生します。
date.today()
現在のローカルな日付を返します。
date.fromtimestamp(timestamp)
POSIXタイムスタンプから日付を取得します。タイムスタンプの値が範囲外の場合はOverflowErrorが発生します。
date.fromordinal(ordinal)
グレゴリオ暦の序数(西暦1年1月1日を1とした通算日数)から日付を取得します。
date.toordinal()
日付をグレゴリオ暦の序数に変換して返します。
date.weekday()
曜日を整数で返します。月曜=0、火曜=1というように、日曜は6になります。
date.isoformat()
日付をISO 8601形式の文字列(YYYY-MM-DD)で返します。
dateオブジェクトの実行例
import datetime as dt
new_date = dt.date(1998, 9, 5) # 1998年9月5日の日付を保存
print("The Date is: " + str(new_date))
print("Ordinal value of given date: " + str(new_date.toordinal()))
print("The weekday of the given date: " + str(new_date.weekday())) # 月曜は0
my_date = dt.date.fromordinal(732698) # 序数から日付を作成
print("The Date from ordinal is: " + str(my_date))
td = my_date - new_date # timedeltaオブジェクトを作成
print('td Type: ' + str(type(td)) + '\nDifference: ' + str(td))
出力結果
The Date is: 1998-09-05 Ordinal value of given date: 729637 The weekday of the given date: 5 The Date from ordinal is: 2007-01-22 td Type: <class 'datetime.timedelta'> Difference: 3061 days, 0:00:00
timeオブジェクトとは
timeオブジェクトはローカル時刻を表します。hour(時)、minute(分)、second(秒)、microsecond(マイクロ秒)、tzinfo(タイムゾーン情報)の要素を持ちます。それぞれの範囲は、hourが0〜23、minuteとsecondが0〜59、microsecondが0〜999999です。
以下に、timeオブジェクトに関連する主なメソッドを紹介します。
time.fromisoformat(time_string)
ISO 8601形式の文字列から時刻を取得します。time.isoformat()メソッドが出力する形式の文字列を解析できます。
time.replace(hour=..., minute=..., second=..., microsecond=..., tzinfo=..., fold=0)
引数で指定した値を持つ新しい時刻オブジェクトを返します。引数を省略した場合は、元のオブジェクトと同じ値が使用されます。
time.tzname()
タイムゾーンの名前を返します。tzinfoがNoneの場合はNoneを返します。
datetimeオブジェクトとは
datetimeオブジェクトは、日付と時刻の両方の情報を保持します。dateオブジェクトと同様にグレゴリオ暦をサポートし、1日はちょうど3600×24秒として扱われます。
dateおよびtimeオブジェクトのメソッドに加えて、datetime独自のメソッドも用意されています。
datetime.now(tz=None)
現在の日付と時刻を取得します。引数tzが省略されるかNoneの場合は、today()メソッドと同様の結果を返します。
datetime.utcnow()
現在のUTC(協定世界時)の日付と時刻の情報を取得します。
strftime()とstrptime()による書式変換
datetimeモジュールには、日時と文字列を相互に変換するためのstrftime()とstrptime()という2つの重要なメソッドがあります。これらはdate・time・datetimeオブジェクトのいずれにも適用できます。
strftime(format)
日時オブジェクトを、format引数で指定した書式の文字列に変換します。tが指定されない場合はlocaltime()が返す現在時刻が使用され、tのフィールドが許容範囲外の場合はValueErrorが発生します。
strptime(date_string, format)
指定した書式に従って文字列を解析し、日時オブジェクトを生成します。formatパラメータにはstrftime()と同じディレクティブを使用でき、デフォルトはctime()の出力形式に一致する「%a %b %d %H:%M:%S %Y」です。
これらのメソッドで使われる主なディレクティブは以下の通りです。
| 番号 | ディレクティブと説明 |
|---|---|
| 1 | %A 完全な曜日名(例:Sunday) |
| 2 | %B 完全な月名(例:August) |
| 3 | %d 日(01〜31) |
| 4 | %S 秒(00〜59) |
| 5 | %G ISO週番号に対応する4桁の年 |
| 6 | %m 月(01〜12) |
| 7 | %M 分(00〜59) |
| 8 | %T 現在時刻(%H:%M:%Sと同等) |
| 9 | %W 年内の週番号(最初の月曜日を第1週の初日とする) |
| 10 | %w 曜日を10進数で表したもの(日曜=0) |
| 11 | %Y 世p> 世紀を含む4桁の年 |
| 12 | %Z / %z タイムゾーンの名前・略称/UTCからのオフセット |
datetimeオブジェクトの実行例
import datetime as dt
my_date1 = dt.datetime(2015, 1, 4) # 2015年1月4日の日付を保存
print(my_date1)
print('The Weekday of that day was: ' + my_date1.strftime('%A'))
my_date2 = dt.datetime.strptime('August-15-2017', '%B-%d-%Y') # 2017年8月15日の日付を保存
print(my_date2)
print('The Weekday of that day was: ' + my_date2.strftime('%A'))
print('The difference between two days: ' + str(abs(my_date1 - my_date2)))
出力結果
2015-01-04 00:00:00 The Weekday of that day was: Sunday 2017-08-15 00:00:00 The Weekday of that day was: Tuesday The difference between two days: 954 days, 0:00:00
-
OneNoteで日付と時刻を追加・編集する方法
OneNoteで新しいページを作成すると、ノートブックに日付と時刻のスタンプが自動的に追加されます。この自動の日付と時刻は編集可能で、OneNoteが提供するタイムスタンプ機能を使えば、ページに自由に日付や時刻を追加することもできます。さらに、現在の日付や過去の日付を追加したり、特定の日付を入力して祝日などの予定を記録しておくことも可能です。 OneNoteで日付と時刻を挿入する方法 タイムスタンプとは、ノートブックのページに日付や時刻を追加できるOneNoteの便利な機能です。OneNoteで利用できるタイムスタンプには、以下の3種類があります。 日付: 今日の日付を挿入します。 時刻:
-
Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説
本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス