今日の日付をPythonでYYYY-MM-DDで取得していますか?


326

私が使用しています:

str(datetime.datetime.today()).split()[0]

今日の日付をYYYY-MM-DDフォーマットで返します。

これを達成するためのそれほど粗くない方法はありますか?


3
「原油」とはどういう意味ですか?
ゴンバット2015

4
多分これ?\ n now = datetime.datetime.now()\ n str(now.strftime( "Y-%m-%d")
Gombat

3
@Gombat何平均、私の経験では、分割、インデックス、連結することなく、私たちはPythonで欲しいものを得るための方法で構築された、などの参加は通常ありますされて
Pyderman

回答:


604

あなたはstrftimeを使うことができます:

from datetime import datetime

datetime.today().strftime('%Y-%m-%d')

さらに、最後にゼロ詰めの時間、分、秒を探している人のために:(Gabriel Staplesによるコメント)

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')

「%x」が機能する可能性も高いですが、それはロケールに依存します
Joran Beasley

19
最後にゼロでパディングされた時間、分、秒も探している人のために:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
ガブリエルステープルズ

どうtime.strftime("%Y-%m-%d")ですか?
aderchox

UTC日付の場合:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

・ワースは、注目にdateこれが利用できるだけでなく、持っているdatetime
dummyDev

116

datetime.date.today()結果を使用して変換できますdatetime.dateオブジェクトをして文字列にます。

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'

セパレータをに変更することは可能/ですか?
Stevoisiak 2018年

3
@StevenVascellaroなるでしょうdate.today().strftime('%Y/%m/%d')
kmonsoor 2018年

2
@StevenVascellaro悪い考え。リーダーは通常、セパレーター.を「DMY」、セパレーター/をto 、セパレーターをM/D/Yと想定-Y-M-Dます。誰もがこれらのガイドラインに従うわけではありませんが、誰もがに切り替えていない限り、国際的に日付を読むのに役立ちますY-M-D
glglgl 2018

1
@glglglアメリカの日付形式m / d / yを想定したAPIを使用しています。アプリケーションの注文をすでに変更しました。
Stevoisiak

1
@glglglはい、私はm / d / yを使用しています
Stevoisiak

35

面白いコードを覚えるのが好きなら、Datetimeはとても素敵です。シンプルさを好みませんか?

>>> import arrow
>>> arrow.now().format('YYYY-MM-DD')
'2017-02-17'

このモジュールは、あなたの意味を理解するのに十分なほど賢いです。

ただしてくださいpip install arrow

補遺:この回答で問題が発生した人への回答として、Pythonで日付を処理するための代替アプローチの1つを矢印で表しています。それはほとんど私が提案するつもりだったものです。


17
このような単純なタスクの場合、組み込みライブラリがそれを簡単に実行できるのに、なぜ別のライブラリを使用するのでしょうか。もちろん、ユーザーが他の多数の{time、date}関連の関数を必要とする場合、新しいライブラリを導入することは理にかなっています。
kmonsoor 2018

2
あなたはその2行目のコードを読んで笑わせました。print(date.today())>>「2018-12-16」よりはどうですか?笑って簡単にint値を取得t.year,t.month,t.day+1>>(2018、12、17)ここt = date.today()で、人々は緑の矢印を呼び出して時間を知らせる必要はありません。コードが多すぎて覚えられない...
水たまり

1
@水たまり:陽気。
Bill Bell、

@kmonsoorどうimport datetime違うのimport arrow?確かに1つは組み込まれていarrowますが、より便利な形式を提供する場合は、それを使用しないのはなぜですか?
information_interchange

1
@information_interchangeあなたはすでにあなたの質問に答えました。組み込みかそうでないか。誰かがそれらの余分なものを必要とするなら、確かに、なぜarrowでしょうか?しかし、多くの単純なプロジェクトでは、それは単に不要です。また、多くの社内プロジェクトでは、PPLは新しいライブラリを含めるための承認を得る必要があります。
kmonsoor

30

いつもisoformat()この機能を使っています。

from datetime import date    
today = date.today().isoformat()
print(today) # '2018-12-05'

これは、標準形式の時刻も必要な場合は、datetimeオブジェクトでも機能することに注意してください。

from datetime import datetime
now = datetime.today().isoformat()
print(now) # '2018-12-05T11:15:55.126382'

15

他の回答はpythonの使用を示唆していますdatetime.datetimeが、@ Bill Bellが言ったdatetimeように、サービスとして、またはAPIのより大きなエコシステムの一部として、より単純なインターフェースを提供する他のライブラリがあります。以下は、作業をdatetimes非常に簡単にする2つのライブラリです。

パンダ

pandasライブラリpd.to_datetimeから使用できます。返されるものに応じて、さまざまなオプションがあります。

import pandas as pd

pd.to_datetime('today')  # pd.to_datetime('now')
# Timestamp('2019-03-27 00:00:10.958567')

Python datetimeオブジェクトとして、

pd.to_datetime('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 50, 42, 587629)

フォーマットされた日付文字列として、

pd.to_datetime('today').isoformat()
# '2019-04-18T04:03:32.493337'

# Or, `strftime` for custom formats.
pd.to_datetime('today').strftime('%Y-%m-%d')
# '2019-03-27'

タイムスタンプから日付のみを取得するには、を呼び出しますTimestamp.date

pd.to_datetime('today').date()
# datetime.date(2019, 3, 27)

とは別にto_datetime、以下をTimestamp使用してオブジェクトを直接インスタンス化できます。

pd.Timestamp('today')  # pd.Timestamp('now')
# Timestamp('2019-04-18 03:43:33.233093')

pd.Timestamp('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 53, 46, 220068)

タイムスタンプのタイムゾーンを認識させたい場合は、tz引数にタイムゾーンを渡します。

pd.Timestamp('now', tz='America/Los_Angeles')
# Timestamp('2019-04-18 03:59:02.647819-0700', tz='America/Los_Angeles')

振り子

あなたが作業している場合は、振り子、いくつかの興味深い選択肢があります。を使用して現在のタイムスタンプを取得するか、を使用してnow()今日の日付を取得できますtoday()

import pendulum 

pendulum.now()
# DateTime(2019, 3, 27, 0, 2, 41, 452264, tzinfo=Timezone('America/Los_Angeles'))

pendulum.today()
# DateTime(2019, 3, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

さらに、追加のtimedelta演算を行わなくても、日付を直接取得しtomorrow()たりできますyesterday()

pendulum.yesterday()
# DateTime(2019, 3, 26, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

pendulum.tomorrow()
# DateTime(2019, 3, 28, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

利用可能なさまざまなフォーマットオプションがあります。

pendulum.now().to_date_string()
# '2019-03-27'

pendulum.now().to_formatted_date_string()
# 'Mar 27, 2019'

pendulum.now().to_day_datetime_string()
# 'Wed, Mar 27, 2019 12:04 AM'

3
素晴らしいニュースのパンダにもそれがあります!
ZygD

1
これは本当に素晴らしいです、特にパンダに取り組んでいるとき
loveR

pd.to_datetime(day).date()は、パンダを使用していてstrに変換したくない場合に便利です。ありがとう!
Brndn

4

非常に遅い答えですが、使用できます:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14

1
ありがとう、これは一番きれいなものです。
BarbarosÖzhan


-5

これはシンプルですが、おそらく何とか非効率的でバグが多いので、私はこれを好みます。強力なエラー防止プログラムが必要な場合は、シェルコマンドの終了コードを確認する必要があります。

os.system('date +%Y-%m-%d')

4
これは、実際に日付をフォーマットするのではなく、システムのdateコマンドが返す結果を確認する目的でのみ使用してください。これは、終了コードのチェック以外にもいくつかの理由があります。1.ポータブルではありません。Windowsのdateコマンドは日付を設定します2.非効率的です。シェル全体を作成する必要があります。次に、コマンドを解析、検索、実行し、出力を返し、そのシェルを破棄する必要があります。3。単にunpythonicです-よく知られている基本的なライブラリを知らないことを示しています。そのコードを見る言語に新参者を誤解させる可能性もあります
キャプテンレプトン2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.