理由:日付はオブジェクトです
Pythonでは、日付はオブジェクトです。したがって、それらを操作するときは、文字列やタイムスタンプなどではなく、オブジェクトを操作します。
Pythonのオブジェクトには、2つの文字列表現があります。
「印刷」で使用される正規表現は、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()
。
方法:それで何をしたいですか?
日付を操作するときは、ずっと日付オブジェクトを使い続けてください。彼らは何千もの便利なメソッドを取得し、ほとんどのPython APIは日付がオブジェクトであることを期待しています。
それらを表示したい場合は、を使用してくださいstr()
。Pythonでは、すべてを明示的にキャストすることをお勧めします。したがって、印刷するときがきたときに、を使用して日付の文字列表現を取得しますstr(date)
。
最後に一つだけ。日付を印刷しようとすると、が印刷されましたmylist
。日付を印刷する場合は、コンテナ(リスト)ではなく、日付オブジェクトを印刷する必要があります。
たとえば、すべての日付をリストに印刷したい場合:
for date in mylist :
print str(date)
ことを注意その特定のケースでは、あなたも省略できstr()
、印刷はあなたのためにそれを使用するので。しかし、それは習慣になるべきではありません:-)
コードを使用した実用的なケース
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()
日付のフォーマット方法を説明する文字列パターンが必要です。
EG:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
aの後のすべての文字は、"%"
何かの形式を表しています。
%d
日番号です
%m
月番号です
%b
月の省略形です
%y
下2桁の年です
%Y
通年です
等
公式ドキュメント、またはMcCutchenのクイックリファレンスをご覧ください。すべてを知ることはできないをください。
PEP3101以降、すべてのオブジェクトは、任意の文字列のメソッド形式によって自動的に使用される独自の形式を持つことができます。日時の場合、形式は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)に関する別の質問のために;-)
str()
リストの各要素に)適用することによります。これはprint
、solotoday
オブジェクトに対して暗黙的に行われたものだからです。