web-dev-qa-db-ja.com

Pythonで現在時刻を取得する方法

現在時刻を取得するために使用されるモジュール/メソッドは何ですか?

2345
user46646

つかいます:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

そしてちょうどその時:

>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.now().time())
09:17:51.914526

詳しくは ドキュメント をご覧ください。

入力を節約するために、datetimeモジュールからdatetimeオブジェクトをインポートすることができます。

>>> from datetime import datetime

次に、上記のすべてから先頭のdatetime.を削除します。

2475
Harley Holcombe

time.strftime() を使用できます。

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
860
Sean James
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

この例では、出力は次のようになります。'2013-09-18 11:16:32'

これが strftime のリストです。

459
ParaMeterz

Harley's answer に似ていますが、ちょっと人間的に読みやすい形式にstr()関数を使用します。

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
434
Ray Vega

Pythonの現在時刻を知るにはどうすればいいですか?

timeモジュール

timeモジュールは他のユーティリティと同様に "エポックからの経過秒数"で時間を教えてくれる関数を提供します。

import time

Unixエポックタイム

これは、データベースに保存するためのタイムスタンプを取得するための形式です。整数に変換できる単純な浮動小数点数です。 1970年1月1日00:00:00からの秒数を表すので、秒単位の算術計算にも適しています。また、次に見る他の時間表現と比較してメモリ使用量が少なくてすみます。

>>> time.time()
1424233311.771502

このタイムスタンプはうるう秒を考慮していないので、線形ではありません - うるう秒は無視されます。そのため、国際的なUTC標準と同等ではありませんが、それは近いため、ほとんどの記録管理のケースで非常に優れています。

ただし、これは人間のスケジューリングには理想的ではありません。将来のイベントがある特定の時点で開催されるのであれば、datetimeオブジェクトまたはserialized datetimeオブジェクトに解析できる文字列を使ってその時間を保存します(これらについては後で説明します)。

time.ctime

現在の時刻をオペレーティングシステムに適した方法で表すこともできます(つまり、システム設定を変更すると変わる可能性があるため、他の人が予想しているように、これをすべてのシステムで標準にしてはいけません) 。これは典型的にはユーザーフレンドリーですが、典​​型的には年代順にソートできる文字列にはなりません。

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

同様にctimeを使ってタイムスタンプを人間が読める形式にすることができます。

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

この変換は記録の保存にも適していません(人間によってのみ解析されるテキストを除いて - そして改善された光学式文字認識と人工知能を使えば、これらのケースの数は減ると思います)。

datetimeモジュール

datetimeモジュールもここではとても便利です。

>>> import datetime

datetime.datetime.now

datetime.nowは、現在時刻を返すクラスメソッドです。タイムゾーン情報を指定せずにtime.localtimeを使用します(指定しない場合は、以下のタイムゾーン対応を参照)。それはシェル上にエコーされた(あなたが同等のオブジェクトを再作成することを可能にする)表現を持ちますが、印刷される(またはstrに強制される)とき、それは人間が読める(そしてほぼISO)フォーマットになり、辞書式ソートは以下と同等です。年代順

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetimeのutcnow

これを行うことで、世界標準であるUTC時間で日時オブジェクトを取得できます。

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTCはGMTタイムゾーンとほぼ同等の時間標準です。 (GMTとUTCは夏時間には変更されませんが、夏の間はイギリスの夏時間など、他のタイムゾーンに切り替えることができます。)

日時タイムゾーン対応

ただし、これまでに作成した日時オブジェクトはどれも、さまざまなタイムゾーンに簡単に変換することはできません。その問題をpytzモジュールで解決できます。

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

同様に、Python 3では、utc timezoneインスタンスがアタッチされたtimezoneクラスがあります。これは、オブジェクトのタイムゾーンを認識させるものです(ただし、便利なpytzモジュールなしで別のタイムゾーンに変換することは読者への課題として残ります)。

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

そして、元のutcオブジェクトからタイムゾーンに簡単に変換できることがわかります。

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

ナイーブなdatetimeオブジェクトをpytztimezone localizeメソッドで(またはreplaceで盲目的に)置き換えられることで気付かせることもできますが、これらはベストプラクティスよりも最後の手段です。

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

pytzモジュールを使用すると、datetimeオブジェクトをタイムゾーン対応にして、pytzモジュールで使用可能な何百ものタイムゾーンに変換することができます。

このオブジェクトを表向きにUTC時間でシリアライズして that をデータベースに格納することもできますが、最初に示したUnix Epoch時間を単に格納するよりもはるかに多くのメモリが必要になりエラーが発生しやすくなります。

他の時間帯の表示方法は、特にエラーが発生しやすくなります。特に、異なるタイムゾーンからのデータを扱う場合はそうです。文字列またはシリアル化されたdatetimeオブジェクトがどのタイムゾーンを対象としていたかについて混乱しないようにする必要があります。

Pythonを使用してユーザーに時間を表示している場合、ctimeはテーブルではなく(通常はうまくソートされません)、おそらく時計ではうまく機能します。しかし、私は個人的には、Pythonで時間を扱うとき、Unix時間かタイムゾーンを意識したUTCのdatetimeオブジェクトを使うことをお勧めします。

282
Aaron Hall

行う

from time import time

t = time()
  • t - 浮動小数点数。時間間隔測定に適しています。

UnixとWindowsプラットフォームには多少の違いがあります。

118
maxp
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

現在のGMTを指定の形式で出力します。 localtime()メソッドもあります。

この ページ に詳細があります。

87
Vijay Dev

すべての良い提案が、私は自分自身でctime()を使うのが一番簡単だと思います:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

これは現在の現地時間のフォーマットの整った文字列表現を与える。

53
Ethereal

シンプルで簡単

datetimeモジュールを使うと、

import datetime
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

出力:

2017-10-17 23:48:55

_または_

timeを使う

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

出力:

2017-10-17 18:22:26
46
Ani Menon

現在の時間がtimeオブジェクトとして必要な場合

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
40
bluish

最速の方法は

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
38
nacholibre

.isoformat()はドキュメントの中にありますが、まだここにはありません(これは@Ray Vegaの答えによく似ています):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
30
emmagras

合衆国海軍の公式計時係である アメリカ海軍天文台 に聞いてみませんか?

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

あなたが(私のように)D.C.エリアに住んでいるなら、待ち時間はそれほど悪くないかもしれません….

28
C8H10N4O2

これは私が結局行ったものです:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

また、この表はあなたが望むようにフォーマットされた日付を得るために適切なフォーマットコードを選ぶために必要な参照です(Pythonの "datetime"ドキュメント here から)。

strftime format code table

19
Kristen G.

Pandas を使用して現在の時刻を取得すると、当面の問題をやり過ぎるようになります。

import pandas as pd
print (pd.datetime.now())
print (pd.datetime.now().date())
print (pd.datetime.now().year)
print (pd.datetime.now().month)
print (pd.datetime.now().day)
print (pd.datetime.now().hour)
print (pd.datetime.now().minute)
print (pd.datetime.now().second)
print (pd.datetime.now().microsecond)

出力:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693
19
prudhvi Indana
import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

dir(date)またはパッケージを含む変数を実行してください。変数に関連付けられているすべての属性とメソッドを取得できます。

15
theBuzzyCoder

datetime.now()は、現在の時刻を現地タイムゾーンの時刻を表す単純なdatetimeオブジェクトとして返します。その値は、例えばDST遷移(「フォールバック」)の間に曖昧になる可能性がある。あいまいさを避けるために、どちらかのUTCタイムゾーンを使用する必要があります。

from datetime import datetime

utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417

あるいは、対応するタイムゾーン情報が添付されたタイムゾーン対応オブジェクト(Python 3.2以降):

from datetime import datetime, timezone

now = datetime.now(timezone.utc).astimezone()
print(now) # -> 2014-12-23 01:49:25.837541+03:00
13
jfs

デフォルトでは、now()関数はYYYY-MM-DD HH:MM:SS:MSフォーマットで出力を返します。以下のサンプルスクリプトを使用して、現在の日付と時刻をPythonスクリプトで取得し、結果を画面に表示します。以下の内容でファイルgetDateTime1.pyを作成します。

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

出力は以下のようになります。

2018-03-01 17:03:46.759624
12
Madhusudhan R

すでにNumPyを使っているのであれば、直接numpy.datetime64()関数を使うことができます。

import numpy as np
str(np.datetime64('now'))

日付のみ

str(np.datetime64('today'))

あるいは、Pandasを既に使っているのであれば、pandas.to_datetime()関数を使うことができます。

import pandas as pd
str(pd.to_datetime('now'))

または

str(pd.to_datetime('today'))
12
durjoy

http://crsmithdev.com/arrow/ からarrowモジュールを試してみてください。

import arrow
arrow.now()

またはUTCのバージョン:

arrow.utcnow()

出力を変更するには、.format()を追加してください。

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

特定のタイムゾーンの場合:

arrow.now('US/Pacific')

1時間前:

arrow.utcnow().replace(hours=-1)

あるいは、要点が欲しいのなら。

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'
12
Back2Basics

timeモジュールを使うことができます。

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

大文字のYを使うと一年中、yを使うと06/02/15ができます。

あなたはより長い時間を与えるためにも使うことができます。

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'
12
EpsilonX

ミリ秒で時間を取得したいのですが。それらを取得する簡単な方法:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

しかし、私はほしい ほんの数ミリ秒 よね。それらを取得するための最短の方法:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

小数点の数を調整するために最後の乗算からゼロを追加または削除するか、単に次のようにします。

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
11
y.selivonchyk
>>> import datetime, time
>>> time = strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:20:58:20S'
11
user2030113

この質問はそれのためだけに新しい答えを必要としません...しかし、光沢のある新しい風味のあるおもちゃ/モジュールは十分な正当化です。それは Pendulum library で、arrowが試みたような固有の欠陥やバグがない限り、arrowが試みたようなことをしているようです。

たとえば、元の質問に対する答えは次のとおりです。

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.utcnow())
2018-08-13T19:29:35.051023+00:00

心配するために、複数のRFCやISOを含む、アドレス指定を必要とする多くの規格があります。今までそれらを混同してください。心配しないでください、dir(pendulum.constants)をちょっと見てください。ただし、そこにはRFCとISOのフォーマット以外のものがあります。

現地語を言うと、どういう意味ですか?ええと、

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

おそらくあなたの残りの大部分は他の場所を意味します。

そしてそれは続きます。短い話:振り子は、HTTPに対する要求が日付と時刻に対して行ったことを試みます。特にその使いやすさと豊富なドキュメンテーションの両方のために、それは考慮する価値があります。

10
Ben

現在のタイムスタンプをミリ秒単位で表示したい場合(たとえば、実行時間を測定する場合など)、 "timeit"モジュールを使用することもできます。

import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))
8
motagirl2

以下はフォーマットせずに時間を取得するために使用するものです。分割方法を好まない人もいますが、ここでは役に立ちます。

from time import ctime
print ctime().split()[3]

HH:MM:SS形式で印刷されます。

6
Amro elaswar

誰もまだそれについて言及していないので、これは私が最近遭遇したものです... datetimeのutcnow()と組み合わせたpytzタイムゾーンのfromutc()メソッドは私が役に立つ現在の時刻(と日付)を得るために私が見つけた最良の方法ですどのタイムゾーンでも。

from datetime import datetime

import pytz


JST = pytz.timezone("Asia/Tokyo")


local_time = JST.fromutc(datetime.utcnow())

あなたが望むのが時間だけであれば、local_time.time()でそれを得ることができます。

6
kungphu

あなたは時間を得るためにこの関数を使うことができます(残念ながらそれは午前または午後を言いません):

def gettime():
        from datetime import datetime
        return ((str(datetime.now())).split(' ')[1]).split('.')[0]

後でマージする時間、分、秒、ミリ秒を取得するには、以下の関数を使用できます。

時:

def gethour():
        from datetime import datetime
        return return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]

分:

def getminute():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]

秒:

def getsecond():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]

ミリ秒:

def getmillisecond():
        from datetime import datetime
        return return (str(datetime.now())).split('.')[1]
6
Richie Bendall
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

date は日付を印刷し、 time は時間を印刷します。

6
from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]

Ctime()を呼び出すとき、秒を 'Day Month Date HH:MM:SS Year'の形式の文字列に変換し(たとえば、 'Wed January 17 16:53:22 2018')、それからsplit()メソッドを呼び出します。あなたの文字列['Wed'、 'Jan'、 '17'、 '16:56:45'、 '2018']からリストを作成します(デフォルトの区切り文字はスペースです)。

大括弧は、リスト内の必要な引数を「選択」するために使用されます。

1行だけ呼び出すようにしてください。私がしたようにそれらを呼ぶべきではありません、それはほんの一例でした。

3
Bojan Petrovic

これはとても簡単です。試してください:

    import datetime
    date_time = str(datetime.datetime.now())
    date = date_time.split()[0]
    time = date_time.split()[1]
2
Sachin Verma
get current date time attributes:


import datetime

currentDT = datetime.datetime.now()

print ("Current Year is: %d" % currentDT.year)
print ("Current Month is: %d" % currentDT.month)
print ("Current Day is: %d" % currentDT.day)
print ("Current Hour is: %d" % currentDT.hour)
print ("Current Minute is: %d" % currentDT.minute)
print ("Current Second is: %d" % currentDT.second)
print ("Current Microsecond is: %d" % currentDT.microsecond)


#!/usr/bin/python
import time;

ticks = time.time()
print "Number of ticks since "12:00am, Jan 1, 1970":", ticks
2
Ram Prajapati

最初にdatetimeからdatetimeモジュールをインポートします

from datetime import datetime

その後、現在の時刻を 'yyyy-mm-dd hh:mm:ss'として印刷します。

print(str(datetime.now())

'hh:mm:ss'という形式の時間だけを取得するには、ssは全秒数と経過秒数の分数を表します。

print(str(datetime.now()[11:])

Datetime.now()を文字列に変換すると、通常のDATES AND TIMESのような形式の回答が得られます。

2
Samuel Nde

この質問はPythonに関するものですが、DjangoはPythonで最も広く使用されているフレームワークの1つなので、Djangoを使用している場合は常にtimezone.now()ではなくdatetime.datetime.now()を使用できることに注意してください。前者はタイムゾーン「認識」していますが、後者は認識していません。

timezone.now()の詳細と理論的根拠については this SO answerDjangoのドキュメント を参照してください。

from Django.utils import timezone

now = timezone.now()
0
Anupam