web-dev-qa-db-ja.com

マイクロ秒のコンポーネントなしの文字列へのPythonのdatetime

現在アムステルダム(!)の時間文字列のみを含むBitbucket API応答にUTCの時間文字列を追加しています。他の場所で返されるUTC時刻文字列との一貫性を保つために、望ましい形式は2011-11-03 11:07:04です(+00:00が後に続きますが、それはそれほど重要ではありません)。

datetimeインスタンスからそのような文字列( なし マイクロ秒コンポーネント)を作成する最善の方法は何ですか with マイクロ秒コンポーネント?

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

私は可能な答えとして私に発生する最良の選択肢を追加しますが、もっと洗練された解決策があるかもしれません。

編集: 私はそうではないことに言及すべきです 実際には 現在の時刻を表示します - 簡単な例を提供するためにdatetime.nowを使用しました。そのため、このソリューションでは、受け取ったdatetimeインスタンスにマイクロ秒のコンポーネントが含まれると想定してはいけません。

347
davidchambers

標準フォーマットとは異なる特定のフォーマットでdatetimeオブジェクトをフォーマットしたい場合は、そのフォーマットを明示的に指定するのが最善です。

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

%ディレクティブの説明については、 datetime.strftime() の資料を参照してください。

728
Sven Marnach
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
145
davidchambers

Python 3.6の場合:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat

43
codeif

これが私のやり方です。 ISOフォーマット

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

ISOフォーマットが不要な場合は、 'T'を置き換えることができます。

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
35
radtek

さらに別の選択肢:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

デフォルトではこれは現地時間を使用します、あなたがUTCを必要とするなら、あなたは以下を使うことができます:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
16
Andrew Clark

スライスして欲しい最初の19文字を残してください。

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
14

すべてのdatetime.datetimeインスタンスがマイクロ秒のコンポーネントを持つわけではないので(つまり、ゼロの場合)、文字列を "。"で区切ることができます。そして最初のアイテムだけを取ります。

unicode(datetime.datetime.now()).partition('.')[0]
5
Austin Marshall

私はいつもやる:

import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:
print(now)

出力:

2019-01-13 14:40:28
2
An0n

私たちは以下のようなことを試すことができます

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
1
Abhishek Bajaj

私はこれが最も簡単な方法だと思った。

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>> 
0
Muhammed Irfan