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


2890

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


私たちは、本番環境で世界中のより多くのサービスが互いに接続され、タイムゾーンを意識した日時が必要な標準となっていることを確認しながら、ノート、最も投票の答えは、timezonoe-ナイーブ日時ためのものでください
SławomirLenart

回答:


3051

使用する:

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

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

そしてちょうどその時:

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

>>> print(datetime.datetime.now().time())
15:08:24.789150

ドキュメントを参照してくださいをください。

タイプを保存するためにdatetimedatetimeモジュールからオブジェクトをインポートできます:

>>> from datetime import datetime

次にdatetime.、上記のすべてからリードを削除します。


25
この回答がタイムゾーン(例としてはUTC)をカバーしていて、おそらくtime.time()で始まっているとよいでしょう。
グレッグリンダール2018年

4
@Toskan形式は質問の一部ではなかったので、回答の一部にするべきではありません。フォーマットのようなものを含むモジュールのより多くのドキュメントへのリンクがすでに提供されています。
JiyuuSensei

Pythonのどのバージョンが最初の答えでしたか?datetime.datetime.now()私のPython 2.7インタラクティブコンソール(IronPythonはまだ更新されていません)に入力するだけprint()で、回答で使用した新しい例と同じ動作が得られます。私は元の答えが示しているものをうまく再現していません(datetime.datetime(2009、1、6、15、8、24、78915))。(私が本当に望んでいるわけではありませんが、print()の動作が優先されますが、私は好奇心が強いです。)
RTHarston '29

@BobVicktor:Python 2.7、3.7、および3.8はすべて同じ動作をしますが、何が表示されているかはわかりません。
ハーレーホルコム

@HarleyHolcombeうーん...それはおそらくIronPythonのものですか?自分で入力datetime.now()すると、回答が示すのと同じように出力されますprint(datetime.now())...
RTHarston

956

使用できますtime.strftime()

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

48
これは以下の@ParaMeterzの回答よりも良い/悪いですか?timeモジュールとモジュールを使用する理由は何datetimeですか?
ネイサン

3
コンピュータの現在の時間は返されません。
2018年

5
これはUTC時間であり、datetimeモジュールとは異なります
Voyager

5
@Saeed:のlocaltime()代わりに関数を使用してgmtime()、現地時間を取得します。
Jeyekomon

3
@frank vs.の関連質問を参照してください。datetimetime
Packard CPW


456

ハーレーの回答に似ていますが、str()関数を使用して、quick-n-dirty、やや人間が読める形式にします。

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

13
表示するのではなく、現在の時刻を取得するだけです。
pppery 2017

@ppperryの場合、変数をRayの回答に単に割り当てるだけです(例myTime = str(datetime.now()))
Lukas

2
関係ありません; "str"ステップは質問の範囲内ではありません
pppery

4
@ppperyはまた、時間の連続を取得することについてではない、とも述べています。オペレーションは彼らがその時間に何をしたいのか全く言っていないので、それを文字列に変換する方法を示すことはなぜ悪いことなのですか?答えのほとんどは当時から文字列を取得することについて話しているので、それは一般的なユースケースのように思われるので、なぜレイの答えを選び出すのですか?単純にする方法を知らなくても、時間をどのように使用を取得して行うことで何かを?あなたはそれを印刷したり、それに対して数学をしたりすることができます、そして答えのほんのいくつかだけがそれに数学を行う方法を示しているので、私は文字列の印刷/取得が一般的な用途だと思います。;
RTHarston

1
この回答に440以上の賛成票があるという事実は、文字列メソッドのマイナーな追加が多くの人々役立つことを示唆しています。
ジョン

360

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

timeモジュール

このtimeモジュールは、「エポックからの秒数」で時間を知らせる関数と、その他のユーティリティを提供します。

import time

Unixエポック時間

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

>>> time.time()
1424233311.771502

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

ただし、これは人間のスケジューリングには理想的ではありません。特定の時点で発生させたい将来のイベントがある場合は、日時オブジェクトまたはシリアル化された日時オブジェクトに解析できる文字列を使用してその時間を保存する必要があります(これらについては後で説明します)。

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

日時 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は夏時間に変更されませんが、ユーザーは夏の間、英国夏時間などの他のタイムゾーンに切り替えることができます。)

日時タイムゾーン対応

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

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

同様に、Python 3 timezoneでは、utc 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

pytzタイムゾーンlocalizeメソッドで、またはtzinfo属性を置き換えることで、単純なdatetimeオブジェクトを認識させることもできます(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時間にシリアル化して保存できますしてデータベースにもできますが、最初に説明したUnixエポック時間を単に格納するよりもはるかに多くのメモリが必要で、エラーが発生しやすくなります。

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

ユーザーのためにPythonで時間を表示している場合ctime、テーブルではなく(通常はうまく並べ替えられません)、時計でうまく機能します。ただし、個人的には、Pythonで時間を処理する場合は、Unix時間またはタイムゾーン対応のUTC datetimeオブジェクトを使用することをお勧めします。


133

行う

from time import time

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

UnixとWindowsプラットフォームでは、いくつかの違いがあります。


Windows 10のホームでの私の結果は1576095264.2682993でした-Windowsの場合、これは秒単位で時間を与えるだけかもしれません。
PythonMaster202

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

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

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


69

以前の答えはすべて良い提案ですが、私はそれを使用するのが最も簡単だと思いますctime()

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

これにより、現在の現地時間を適切にフォーマットされた文字列で表現できます。


OPは、時間を表示する方法ではなく、時間を取得する方法を尋ねました!
TheTechRobo36414519


52

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

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

36

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

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

35

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

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])

DCエリアに住んでいる場合(私のように)、待ち時間はそれほど悪くないかもしれません...


18
@ C8H10N4O2あなたのコンピュータがすでに正しい時間を知っていると他の回答が想定していることは正しいですが、この回答は、コンピュータがインターネットに接続しており、あなたが米国にいて、彼らがそのファイルを削除しないことを想定しています/リンクを変更します。この回答では、受け入れられているよりもはるかに多くの仮定があります。それでもなお賢い
sudobangbang

33

パンダを使用して現在の時刻を取得し、目の前の問題を打ち倒します:

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

28

これは私が最終的に行ったことです:

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

また、この表は、適切なフォーマットコードを選択して、希望どおりにフォーマットされた日付を取得するために必要なリファレンスです(Pythonの「datetime」のドキュメントを参照)。

strftime形式コード表


2
strftime(time_format)現在の現地時間を、指定されたに対応する文字列として返しますtime_format。注:time.strftime()datetime.strftime()例えば、異なる命令セットをサポート%zによってサポートされていないtime.strftime()のPython 2に
jfs

1
時間の代わりに日付時刻を使用する方が良いでしょうか?
Kristen G.

2
多くのtimeモジュール関数は、対応するC関数の薄いラッパーです。datetimeより高いレベルであり、通常はよりポータブルです。
jfs

24

すでにnumpyを使用している場合は、直接numpy.datetime64()関数を使用できます。

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

日付のみ:

str(np.datetime64('today'))

または、すでにパンダを使用している場合は、pandas.to_datetime()関数を使用できます

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

または、

str(pd.to_datetime('today'))

23

次の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'

20

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

18
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

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


@snoftyと@ user1016274、あればimport datetimeそれがあるdatetime.datetime.now()場合は、\ nはfrom datetime import datetimeそれがあるdatetime.now()
theBuzzyCoder

17
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'

「datetime.now()。strftime(...)」と
言うつもり

はい、それはあなたが言ったように行うことができます。"datetime.datetime.now()。strftime("%H:%M:%S:%MS ")"
user2030113

3
%MSはミリ秒を与えません!!
ZF007 2019年

15

デフォルトでは、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

14

この質問はそれのためだけに新しい答えを必要としません...しかし、光沢のある新しい風のおもちゃ/モジュールは、十分な正当化です。それが振り子ライブラリです矢印を妨げる固有の欠陥やバグがないことを除いて、矢印が試みたようなことを行うように見えるです。

たとえば、元の質問に対する答え:

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

心配するために、複数のRFCやISOを含む、アドレス指定を必要とする多くの標準があります。それらを混同してください。心配はいりませんが、dir(pendulum.constants)RFCとISOのフォーマット以外にもいくつかのフォーマットがあります。

ローカルと言うとどういう意味ですか?まあ私が意味する:

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

おそらくあなたの残りのほとんどはどこか別の場所を意味しています。

そして、それは続きます。要するに、振り子はHTTPに対して要求が行った日時を実行しようとします。特に、使いやすさと豊富なドキュメントの両方のため、検討する価値があります。


13

タイムゾーンの現在時刻

from datetime import datetime
import pytz

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London time:", datetime_London.strftime("%H:%M:%S"))

tz_India = pytz.timezone('Asia/India')
datetime_India = datetime.now(tz_India)
print("India time:", datetime_India.strftime("%H:%M:%S"))

#list timezones
pytz.all_timezones

12

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'

5
それは注意してくださいarrow.now('Time/Zone')(一部のタイムゾーンで失敗することがありarrow用途dateutilUTCが壊れた- >地元の変換に使用される内部ですarrow.now()。注:pytzそのような問題を持っていません。また、。他の時間帯関連の問題がある
JFS

12

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

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)

1
これはPython 3で機能します:time.strftime( "%H:%M:%S"、time.localtime())+ '。{}'。format(int(time.time()%1 * 1000))
グレッググラハム

11

この関数を使用して時間を取得できます(残念ながらAMまたはPMとは表示されていません)。

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

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

時間:

def gethour():
    from datetime import datetime
    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 (str(datetime.now())).split('.')[1]

10

ミリ秒単位の現在のタイムスタンプだけが必要な場合(たとえば、実行時間を測定するため)、「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

以下は、フォーマットせずに時間を取得するために使用するものです。一部の人々は分割方法を好まないが、それはここで便利です:

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

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


8

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

from datetime import datetime

import pytz


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


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

時間が必要な場合は、で取得できますlocal_time.time()


驚いたことに、上記の回答はすべてタイムゾーンについて言及していませんでした。また、必要なフォーマットを取得するためにstrftimeを含める必要があります。
GraphicalDot

1
それは他の回答で既にカバーされているので、それは含めませんでした(そして、表示形式は質問の一部ではありませんでした)
kungphu

7

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

参照してください。このSOの答えDjangoのドキュメントの詳細と根拠の背後にあるためにtimezone.now()

from django.utils import timezone

now = timezone.now()

7

ctime()を使用してこれを行うことができます:

from time import time, ctime
t = time()
ctime(t)

出力:

Sat Sep 14 21:27:08 2019

ctime()によって返されるタイムスタンプは地理的な場所によって異なるため、これらの出力は異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.