timeformat - 日付 python format




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

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

timeモジュール

timeモジュールには、「エポックからの秒数」の時間と他のユーティリティを示す関数が用意されています。

import time

Unixエポックタイム

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

>>> time.time()
1424233311.771502

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

しかし、これは人間のスケジューリングには理想的ではありません。 特定の時点で実行する将来のイベントがある場合は、その時間をdatetimeオブジェクトまたはシリアル化された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が、印刷されたとき(または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

次のようにして、グローバルタイムゾーンでdatetimeオブジェクトを取得できます。

>>> 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は夏時間の間は変更されませんが、夏の間はBritish Summer Timeのような他のタイムゾーンに切り替えることができます)。

日時タイムゾーン対応

しかし、これまでに作成した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 timezone localizeメソッドを使用して、またはtzinfo属性をreplaceによって、naiveな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 Epoch時間を格納するよりもはるかに多くのメモリとエラーが発生しやすくなります。

他の時間帯の表示方法は、特に異なる時間帯から来る可能性のあるデータを扱う場合には、エラーを起こしやすくなります。 文字列またはシリアライズされたdatetimeオブジェクトが意図されていた時間帯が混乱しないようにします。

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

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


Harleyの答えと似ていますが、人間が読むことができる、より素早く汚れた、より人間にはわかりやすい形式のstr()関数を使用してください:

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

time.strftime()を使うことができます:

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

アメリカ海軍の公式タイムキーパーである米海軍天文台に質問してみませんか?

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エリア(私のような)に住んでいれば、レイテンシが悪くないかもしれません...


datetime.now()は、ローカルタイムゾーンの時刻を表すnaive 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

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

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

この質問はそれのためだけに新しい答えを必要としません...しかし、光る新しい玩具/モジュールは、十分な正当性です。 これはペンデュラムの図書館であり、矢が生まれたようなことをしているように見えますが、矢印を抱える固有の欠陥やバグはありません。

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

>>> 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に対して何が要求されたのかを日時にしようとします。 特に、その使い易さと広範囲の文書化の両方について考慮する価値があります。


この関数を使用して時間を取得することができます(残念ながらAMやPMとは言えません):

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]

すでに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'))

つかいます:

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

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

そしてちょうどその時:

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

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

同じですが、ややコンパクトです:

>>> datetime.datetime.now().time()

詳細については、ドキュメントを参照しください。

入力を保存するには、 datetimeモジュールからdatetimeオブジェクトをインポートします。

>>> from datetime import datetime

その後、先頭のdatetime.削除しdatetime. 上記のすべてから。


シンプルで簡単:

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

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

最も簡単な方法は

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

現在のタイムスタンプをミリ秒(たとえば、実行時間を測定する)にしたい場合は、 "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))

私はミリ秒で時間を得たいと思う。 それらを手に入れる簡単な方法:

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)

良い提案はありますが、私はctime()自分で使うのが最も簡単です:

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

これにより、現在のローカル時刻の整形された文字列表現が得られます。


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

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

ここにstrftimeのリストがあります。


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

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

このpageは詳細があります。


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 January Date 16:53:22 2018'のように 'Day Day Date HH:MM:SS Year'の形式で秒に変換され、split()メソッドが呼び出されますあなたの文字列['Wed'、 'Jan'、 '17'、 '16:56:45'、 '2018']からリストを作成します(デフォルトのdelimeterはスペースです)。

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

1つのコード行だけを呼び出す必要があります。 私のように呼び出すべきではありません。それは単なる例に過ぎません。


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)またはパッケージを含む任意の変数を実行します。 変数に関連付けられたすべての属性とメソッドを取得できます。





time