# DateTime オブジェクト

`datetime` モジュールでは、様々な日付オブジェクトや時刻オブジェクトを提供しています。以下に示す関数を使う場合には、あらかじめヘッダファイル `datetime.h` をソースに include し (`Python.h` はこのファイルを include しません)、 `PyDateTime_IMPORT` マクロを、通常はモジュール初期化関数から、起動しておく必要があります。このマクロは以下のマクロで使われる静的変数 `PyDateTimeAPI` に C 構造体へのポインタを入れます。

UTCシングルトンにアクセスするためのマクロ:

PyObject *`PyDateTime_TimeZone_UTC`

  UTCタイムゾーンに相当するシングルトンを返します。これは `datetime.timezone.utc` と同じオブジェクトです。

  バージョン 3.7 で追加.

型チェックマクロ:

int `PyDate_Check`(PyObject *ob)

  Return true if ob is of type `PyDateTime_DateType` or a subtype of `PyDateTime_DateType`. ob must not be `NULL`. This function always succeeds.

int `PyDate_CheckExact`(PyObject *ob)

  ob が `PyDateTime_DateType` の場合に真を返します。 ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyDateTime_Check`(PyObject *ob)

  ob が `PyDateTime_DateTimeType` 型か `PyDateTime_DateTimeType` 型のサブタイプのオブジェクトの場合に真を返します; ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyDateTime_CheckExact`(PyObject *ob)

  ob が `PyDateTime_DateTimeType` の場合に真を返します。 ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyTime_Check`(PyObject *ob)

  ob が `PyDateTime_TimeType` 型か `PyDateTime_TimeType` 型のサブタイプのオブジェクトの場合に真を返します; ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyTime_CheckExact`(PyObject *ob)

  ob が `PyDateTime_TimeType` の場合に真を返します。 ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyDelta_Check`(PyObject *ob)

  ob が `PyDateTime_DeltaType` 型か `PyDateTime_DeltaType` 型のサブタイプのオブジェクトの場合に真を返します; ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyDelta_CheckExact`(PyObject *ob)

  ob が `PyDateTime_DeltaType` の場合に真を返します。 ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyTZInfo_Check`(PyObject *ob)

  ob が `PyDateTime_TZInfoType` 型か `PyDateTime_TZInfoType` 型のサブタイプのオブジェクトの場合に真を返します; ob は `NULL` であってはなりません。この関数は常に成功します。

int `PyTZInfo_CheckExact`(PyObject *ob)

  ob が `PyDateTime_TZInfoType` の場合に真を返します。 ob は `NULL` であってはなりません。この関数は常に成功します。

以下はオブジェクトを作成するためのマクロです:

PyObject *`PyDate_FromDate`(int year, int month, int day)
  Return value: New reference.

  指定した年、月、日の `datetime.date` オブジェクトを返します。

PyObject *`PyDateTime_FromDateAndTime`(int year, int month, int day, int hour, int minute, int second, int usecond)
  Return value: New reference.

  指定した年、月、日、時、分、秒、マイクロ秒の `datetime.datetime` オブジェクトを返します。

PyObject *`PyDateTime_FromDateAndTimeAndFold`(int year, int month, int day, int hour, int minute, int second, int usecond, int fold)
  Return value: New reference.

  指定された年、月、日、時、分、秒、マイクロ秒、fold の `datetime.datetime` オブジェクトを返します。

  バージョン 3.6 で追加.

PyObject *`PyTime_FromTime`(int hour, int minute, int second, int usecond)
  Return value: New reference.

  指定された時、分、秒、マイクロ秒の `datetime.time` オブジェクトを返します。

PyObject *`PyTime_FromTimeAndFold`(int hour, int minute, int second, int usecond, int fold)
  Return value: New reference.

  指定された時、分、秒、マイクロ秒、fold の `datetime.time` オブジェクトを返します。

  バージョン 3.6 で追加.

PyObject *`PyDelta_FromDSU`(int days, int seconds, int useconds)
  Return value: New reference.

  指定された日、秒、マイクロ秒の `datetime.timedelta` オブジェクトを返します。マイクロ秒と秒が `datetime.timedelta` オブジェクトで定義されている範囲に入るように正規化を行います。

PyObject *`PyTimeZone_FromOffset`(PyDateTime_DeltaType *offset)
  Return value: New reference.

  offset 引数で指定した固定オフセットを持つ、名前のない `datetime.timezone` オブジェクトを返します。

  バージョン 3.7 で追加.

PyObject *`PyTimeZone_FromOffsetAndName`(PyDateTime_DeltaType *offset, PyUnicode *name)
  Return value: New reference.

  offset*引数で指定した固定のオフセットと、*name のタイムゾーン名を持つ `datetime.timezone` オブジェクトを返します。

  バージョン 3.7 で追加.

以下のマクロは date オブジェクトからフィールド値を取り出すためのものです。引数は `PyDateTime_Date` またはそのサブクラス (例えば `PyDateTime_DateTime`)の インスタンスでなければなりません。引数を `NULL` にしてはならず、型チェックは行いません:

int `PyDateTime_GET_YEAR`(PyDateTime_Date *o)

  年を正の整数で返します。

int `PyDateTime_GET_MONTH`(PyDateTime_Date *o)

  月を 1 から 12 の間の整数で返します。

int `PyDateTime_GET_DAY`(PyDateTime_Date *o)

  日を 1 から 31 の間の整数で返します。

以下のマクロは datetime オブジェクトからフィールド値を取り出すためのものです。引数は `PyDateTime_DateTime` またはそのサブクラスのインスタンスでなければなりません。引数を `NULL` にしてはならず、型チェックは行いません:

int `PyDateTime_DATE_GET_HOUR`(PyDateTime_DateTime *o)

  時を 0 から 23 の間の整数で返します。

int `PyDateTime_DATE_GET_MINUTE`(PyDateTime_DateTime *o)

  分を 0 から 59 の間の整数で返します。

int `PyDateTime_DATE_GET_SECOND`(PyDateTime_DateTime *o)

  秒を 0 から 59 の間の整数で返します。

int `PyDateTime_DATE_GET_MICROSECOND`(PyDateTime_DateTime *o)

  マイクロ秒を 0 から 999999 の間の整数で返します。

int `PyDateTime_DATE_GET_FOLD`(PyDateTime_DateTime *o)

  フォールド(訳注: サマータイムによる時間のずれのこと)を 0 から 1 までの整数で返します。

  バージョン 3.6 で追加.

PyObject *`PyDateTime_DATE_GET_TZINFO`(PyDateTime_DateTime *o)

  Return the tzinfo (which may be `None`).

  バージョン 3.10 で追加.

以下のマクロは time オブジェクトからフィールド値を取り出すためのものです。引数は `PyDateTime_Time` またはそのサブクラスのインスタンスでなければなりません。引数を `NULL` にしてはならず、型チェックは行いません:

int `PyDateTime_TIME_GET_HOUR`(PyDateTime_Time *o)

  時を 0 から 23 の間の整数で返します。

int `PyDateTime_TIME_GET_MINUTE`(PyDateTime_Time *o)

  分を 0 から 59 の間の整数で返します。

int `PyDateTime_TIME_GET_SECOND`(PyDateTime_Time *o)

  秒を 0 から 59 の間の整数で返します。

int `PyDateTime_TIME_GET_MICROSECOND`(PyDateTime_Time *o)

  マイクロ秒を 0 から 999999 の間の整数で返します。

int `PyDateTime_TIME_GET_FOLD`(PyDateTime_Time *o)

  フォールド(訳注: サマータイムによる時間のずれのこと)を 0 から 1 までの整数で返します。

  バージョン 3.6 で追加.

PyObject *`PyDateTime_TIME_GET_TZINFO`(PyDateTime_Time *o)

  Return the tzinfo (which may be `None`).

  バージョン 3.10 で追加.

以下のマクロは time delta オブジェクトからフィールド値をとりだすためのものです。引数は `PyDateTime_Delta` かそのサブクラスのインスタンスでなければなりません。引数を `NULL` にしてはならず、型チェックは行いません:

int `PyDateTime_DELTA_GET_DAYS`(PyDateTime_Delta *o)

  日数を -999999999 から 999999999 の間の整数で返します。

  バージョン 3.3 で追加.

int `PyDateTime_DELTA_GET_SECONDS`(PyDateTime_Delta *o)

  秒数を 0 から 86399 の間の整数で返します。

  バージョン 3.3 で追加.

int `PyDateTime_DELTA_GET_MICROSECONDS`(PyDateTime_Delta *o)

  マイクロ秒を 0 から 999999 の間の整数で返します。

  バージョン 3.3 で追加.

以下のマクロは DB API を実装する上での便宜用です:

PyObject *`PyDateTime_FromTimestamp`(PyObject *args)
  Return value: New reference.

  `datetime.datetime.fromtimestamp()` に渡すのに適した引数タプルから新たな `datetime.datetime` オブジェクトを生成して返します。

PyObject *`PyDate_FromTimestamp`(PyObject *args)
  Return value: New reference.

  `datetime.date.fromtimestamp()` に渡すのに適した引数タプルから新たな `datetime.date` オブジェクトを生成して返します。