エポック時間を日時に変換する


303

私は残りからの応答を得ています

start_time = 1234566
end_time = 1234578

そのエポック秒をMySQL形式の時間に変換して、MySQLデータベースに差異を保存できるようにしたいと考えています。

私は試した:

>>> import time
>>> time.gmtime(123456)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=10, tm_min=17, tm_sec=36, tm_wday=4, tm_yday=2, tm_isdst=0)

上記の結果は私が期待しているものではありません。みたいになりたい

2012-09-12 21:00:00

どうすればこれを達成できますか?

また、なぜ私が得TypeError: a float is requiredているのか

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required

あなたはおよそよろしいですか1347516459425?これは有効なエポックではありません。time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))どこにiあるか試してください1347516459425
Burhan Khalid 2012

@Burhanこれが有効なエポックではないことをどのようにして見つけましたか?
user1667633 2012

2
エポックは〜10〜の範囲内にあるためです。time.ctime(1347516459.425)を使用してみてください。これにより、2012年9月13日が表示されます。小数に注意してください。
Pax Vobiscum 2016年

7
Unix Timeを意味するときは、「エポックタイム」と呼ぶのをやめてください。コンピューティングではさまざまな時代が使用されてきました。
Matt Johnson-Pint 2017

以前はepoch = unix = posix ...と指摘していただきました。
ベン

回答:


354

時間値(floatまたはint)をフォーマットされた文字列に変換するには、以下を使用します。

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))

3
time.strftime( '%Y-%m-%d%H:%M:%S'、time.localtime(1347517491247)) '44671-02-17 11:44:07'なぜですか?
user1667633 2012

3
あなたの例では、「1347517491247」はどこから来たのですか?使用しているリアルタイムの値ですか?
ron rothman 2012

実際、bigbluebuttonサーバーからその値を取得しています
user1667633

20
time.strftime( '%Y-%m-%d%H:%M:%S'、time.localtime(1347517491.247)) '2012-09-13 08:24:51'値はエポック(ミリ秒)
MatthieuW

1
形式文字列の詳細については、docs.python.org / 2 / library / time.htmltime.strftimeを参照してください
georg

221

あなたも使うことができますdatetime

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'

3
どのタイムゾーンでこれが変換されるか、特定のタイムゾーンになりたい場合はどうするか。?
garg10may 2016

4
@ garg10mayエポック時間は常にUTCオフセット0であるため、文字列もUTCオフセット0になります。これはZuluタイムゾーン(+00:00)と同じです。詳しくは、こちらをご覧ください:timeanddate.com/time/zones/z
Devnetics

6
「utcfromtimestamp」関数は、Python 3にUTC時刻を取得することがあります
vwvolodya

この回答を使用する利点は、日時バージョンのstrftime()がより多くのフォーマットプレースホルダー、特に時間のマイクロ秒部分の%fをサポートすることです。不明な理由により、time.strftime()はそれをサポートしていませんが、マイクロ秒は、に入力されるfloat値で表すことができますtime.localtime()
Andreas Maier

60
>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
'2012-09-13 14:22:50' # Local time

UTCを取得するには:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'

docは前者を優先すると述べています
qrtLs

14

これはあなたが必要なものです

In [1]: time.time()
Out[1]: 1347517739.44904

In [2]: time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
Out[2]: '2012-09-13 06:31:43'

float代わりにを入力してください。intそれ以外のTypeError場合は削除してください。

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour

10

これを試して:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(1347517119))
'2012-09-12 23:18:39'

また、MySQLでは次のFROM_UNIXTIMEようにできます。

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

2番目の質問の場合、それはおそらくgetbbb_class.end_time文字列が原因です。次のように数値に変換できます。float(getbbb_class.end_time)


8
#This adds 10 seconds from now.
from datetime import datetime
import commands

date_string_command="date +%s"
utc = commands.getoutput(date_string_command)
a_date=datetime.fromtimestamp(float(int(utc))).strftime('%Y-%m-%d %H:%M:%S')
print('a_date:'+a_date)
utc = int(utc)+10
b_date=datetime.fromtimestamp(float(utc)).strftime('%Y-%m-%d %H:%M:%S')
print('b_date:'+b_date)

これはもう少し複雑ですが、UNIXの日付コマンドから来ています。


3

まず、man gmtimeからのエポックな情報を少し

The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar  time.   When  inter-
       preted  as  an absolute time value, it represents the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal
       Time (UTC).

エポックがどうあるべきかを理解する。

>>> time.time()
1347517171.6514659
>>> time.gmtime(time.time())
(2012, 9, 13, 6, 19, 34, 3, 257, 0)

渡す引数time.gmtime()が整数であることを確認してください。

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