[解決済み] 日付を通常の書式で印刷するには?
質問
これは私のコードです。
import datetime
today = datetime.date.today()
print(today)
これは印刷されます。
2008-11-22
というのは、まさに私が欲しいものです。
しかし、これを追加するリストがあるのですが、突然すべてが"wonky"になってしまいました。以下はそのコードです。
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
これは次のように表示されます。
[datetime.date(2008, 11, 22)]
のような単純な日付だけを取得するにはどうすればよいのでしょうか?
2008-11-22
?
解決方法は?
理由: 日付はオブジェクトである
Pythonでは、日付はオブジェクトです。したがって、それらを操作するときは、文字列やタイムスタンプではなく、オブジェクトを操作することになります。
Pythonのどんなオブジェクトも、2つの文字列表現を持っています。
-
が使用する通常の表現です。
print
を使って取得することができます。str()
関数を使用します。これは、ほとんどの場合、人間が読みやすい形式であり、表示を容易にするために使用されます。そのためstr(datetime.datetime(2008, 11, 22, 19, 53, 42))
は、次のようになります。'2008-11-22 19:53:42'
. -
オブジェクトの性質(データとして)を表現するために使用される代替表現。これは
repr()
この関数は、開発中やデバッグ中に、どのようなデータを操作しているのかを知るのに便利です。repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
では'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
何が起こったかというと、日付の印刷を行う際に
print
を使用していました。
str()
で、きれいな日付文字列を見ることができました。しかし
mylist
を使うと、オブジェクトのリストを表示し、Pythonはデータの集合を表現しようとします。
repr()
.
How:それをどうしたいのか?
さて、日付を操作するときは、ずっと日付オブジェクトを使い続けましょう。たくさんの便利なメソッドがあるし、PythonのAPIのほとんどは日付がオブジェクトであることを想定している。
表示する場合は
str()
. Pythonでは、すべてを明示的にキャストするのがよい習慣です。ですから、印刷するときに、日付の文字列表現を得るには
str(date)
.
最後にもう一つ。日付を印刷しようとすると
mylist
. 日付を印刷したい場合は、そのコンテナ(リスト)ではなく、日付オブジェクトを印刷する必要があります。
例:リスト内のすべての日付を印刷したい場合。
for date in mylist :
print str(date)
なお
その場合
を省略することもできます。
str()
というのも、printがそれを使ってくれるからです。しかし、それが習慣になってはいけません :-)
あなたのコードを使った実用的なケース
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
高度な日付の書式設定
日付はデフォルトで表現されますが、特定のフォーマットで表示したい場合もあります。そのような場合は、カスタム文字列表現として
strftime()
メソッドを使用します。
strftime()
は、日付をどのようにフォーマットしたいかを説明する文字列パターンを期待します。
例:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
の後の文字はすべて
"%"
は何かの形式を表しています。
-
%d
は日数(2桁、必要に応じて先頭に0を付ける)です。 -
%m
は月番号(2桁、必要に応じて先頭に0を付加)です。 -
%b
は月の略称(3文字)です。 -
%B
は完全な月名(文字)です。 -
%y
は年号の省略形(下2桁)です。 -
%Y
は完全な年号(4桁)です。
などです。
公式ドキュメントを見る または マカッチェンのクイックリファレンス 全部を知ることはできない。
から PEP3101 すべてのオブジェクトは、任意の文字列のメソッドフォーマットで自動的に使用される独自の形式を持つことができます。datetimeの場合、その書式は strftimeです。ですから、上記と同じように次のようにすればよいのです。
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
この形式の利点は、他のオブジェクトも同時に変換できることです。
の導入により
書式付き文字列リテラル
(Python 3.6, 2016-12-23 以降) これは次のように書くことができます。
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
ローカライゼーション
日付は使い方を間違えなければ、自動的に現地の言語や文化に合わせることができますが、ちょっと複雑なんです。SO(Stack Overflow)で別の質問をするのがいいかもしれませんね。)
関連
-
Pythonによるjieba分割ライブラリ
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] JavaScriptの日付の書式設定方法
-
[解決済み] JavaScriptで現在の日付を取得するには?
-
[解決済み] 改行やスペースを入れずに印刷する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】ValueError: xとyは同じサイズでなければならない