## 7 `strftime()` の振る舞い

`date`、 `datetime`、および `time` オブジェクトは全て、明示的な書式化文字列でコントロールして 時刻表現文字列を生成するための `strftime(format)` メソッドを サポートしています。大雑把にいうと、`d.strftime(fmt)` は `time` モジュールの `time.strftime(fmt, d.timetuple())` のように動作します。ただし全てのオブジェクトが `timetuple()` メソッドをサポートしているわけではありません。

`time` オブジェクトでは、年、月、日の値がないため、それらの 書式化コードを使うことができません。無理矢理使った場合、 年は `1900` に置き換えられ、月と日は `0` に置き換え られます。

`date` オブジェクトでは、時、分、秒の値がないため、 それらの書式化コードを使うことができません。無理矢理使った場合、 これらの値は `0` に置き換えられます。

naive オブジェクトでは、書式化コード `%z` および `%Z` は空文字列に置き換えられます。

aware オブジェクトでは以下のようになります:

`%z`
  `utcoffset()` は +HHMM あるいは -HHMM の形式をもった 5 文字の文字列に変換されます。HH は UTC オフセット時間を与える 2 桁の文字列で、MM は UTC オフセット分を与える 2 桁の文字列です。 例えば、`utcoffset()` が `timedelta(hours=-3, minutes=-30)` を返した場合、`%z` は文字列 `'-0330'` に置き換わります。

`%Z`
  `tzname()` が `None` を返した場合、`%Z` は 空文字列に置き換わります。そうでない場合、`%Z` は返された 値に置き換わりますが、これは文字列でなければなりません。

Python はプラットフォームの C ライブラリから `strftime()` 関数を呼び出し、プラットフォーム間のバリエーションはよくあることなので、 サポートされている書式化コードの全セットはプラットフォーム間で異なります。 Python の `time` モジュールのドキュメントでは、C 標準 (1989 年版) が要求する書式化コードをリストしており、これらのコードは 標準 C 準拠の実装がなされたプラットフォームでは全て動作します。 1999 年版の C 標準では書式化コードが追加されているので注意してください。

`strftime()` が正しく動作する年の厳密な範囲はプラットフォーム 間で異なります。プラットフォームに関わらず、1900 年以前の年は 使うことができません。