Chuyển đổi thời gian Epoch thành datetime


303

Tôi nhận được phản hồi từ phần còn lại là định dạng thời gian Epoch như

start_time = 1234566
end_time = 1234578

Tôi muốn chuyển đổi giây đó trong thời gian định dạng MySQL để tôi có thể lưu trữ sự khác biệt trong cơ sở dữ liệu MySQL của mình.

Tôi đã thử:

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

Kết quả trên không phải là điều tôi đang mong đợi. Tôi muốn nó như thế

2012-09-12 21:00:00

Xin đề nghị làm thế nào tôi có thể đạt được điều này?

Ngoài ra, tại sao tôi nhận được TypeError: a float is requiredcho

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

Bạn có chắc chắn về 1347516459425? Đây không phải là một kỷ nguyên hợp lệ. Hãy thử time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))i1347516459425.
Burhan Khalid

@Burhan Làm thế nào bạn thấy rằng đây không phải là một Kỷ nguyên hợp lệ?
user1667633

2
Bởi vì một Epoch chỉ trong phạm vi ~ 10¹⁰. Hãy thử sử dụng time.ctime (1348516459.425), điều này sẽ cung cấp cho bạn ngày 13 tháng 9. Tâm thập phân.
Pax Vobiscum 11/03/2016

7
Hãy ngừng gọi nó là "thời gian kỷ nguyên" khi bạn có nghĩa là Thời gian Unix . Đã có nhiều kỷ nguyên khác nhau được sử dụng trong điện toán .
Matt Johnson-Pint

Tôi đã từng sử dụng epoch = unix = posix ... cảm ơn vì đã chỉ ra điều đó.
Ben

Câu trả lời:


354

Để chuyển đổi giá trị thời gian của bạn (float hoặc int) thành một chuỗi được định dạng, hãy sử dụng:

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

3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1348517491247)) '44671-02-17 11:44:07' tại sao?
user1667633

3
Trường hợp "1348517491247" bắt nguồn từ đâu trong ví dụ của bạn? Đây có phải là giá trị thời gian thực mà bạn đang sử dụng không?
ron rothman

thực sự tôi đang nhận được giá trị đó từ máy chủ
bigbluebutton

20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1348517491.247)) '2012-09-13 08:24:51' Giá trị của bạn là epoch tính bằng ms
MatthieuW

1
xem docs.python.org/2/l Library / time.html # time.strftime để biết thêm thông tin trong chuỗi định dạng
georg

221

Bạn cũng có thể sử dụng datetime:

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

3
trong đó múi giờ thực hiện chuyển đổi này, điều gì sẽ xảy ra nếu tôi muốn ở một múi giờ cụ thể. ?
garg10

4
@ garg10may thời gian kỷ nguyên luôn luôn là UTC bù 0, do đó, chuỗi cũng sẽ là UTC bù 0. Điều này tương đương với múi giờ Zulu (nắp: 00). Bạn có thể đọc thêm tại đây: timeanddate.com/time/zones/z
Devnetics

6
Có chức năng 'utcfromtimestamp' để có thời gian UTC trong python 3.
vwvolodya

Ưu điểm của việc sử dụng câu trả lời này là phiên bản datetime strftime()hỗ trợ nhiều trình giữ chỗ định dạng hơn, đặc biệt là% f cho phần thời gian micro giây. Vì những lý do chưa biết, time.strftime()không hỗ trợ điều đó, mặc dù micro giây có thể được biểu thị trong giá trị float được nhập vào 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

Để nhận UTC:

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

doc nói nó thích cái cũ hơn
qrtLs

14

Đây là những gì bạn cần

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'

Vui lòng nhập một floatthay vì một intvà cái khác TypeErrorsẽ biến mất.

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

10

Thử cái này:

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

Cũng trong MySQL, bạn có thể FROM_UNIXTIMEthích:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

Đối với câu hỏi thứ 2 của bạn, có lẽ là vì getbbb_class.end_timemột chuỗi. Bạn có thể chuyển đổi nó thành số như: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)

Đây là một từ dài hơn một chút nhưng nó đến từ lệnh date trong unix.


3

Đầu tiên một chút thông tin trong epoch từ người đàn ông 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).

để hiểu thời đại nên như thế nào.

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

chỉ cần đảm bảo đối số bạn đang truyền tới time.gmtime()là số nguyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.