การแปลงเวลาของยุคในวันที่และเวลา


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

@Burhan คุณพบได้อย่างไรว่านี่ไม่ใช่ยุคที่ถูกต้อง?
1667633

2
เนื่องจากยุคอยู่ในช่วง ~ 10¹⁰เท่านั้น ลองใช้ time.ctime (1347516459.425) ซึ่งจะทำให้คุณ 13 ก.ย. 12 ใจทศนิยม
สันติภาพ Vobiscum

7
กรุณาหยุดเรียกมันว่า "เวลายุค" เมื่อคุณหมายถึงระบบปฏิบัติการยูนิกซ์เวลา มีการepochs ที่แตกต่างกันจำนวนมากที่ใช้ในการคำนวณ
Matt Johnson-Pint

ฉันเคยใช้ epoch = unix = posix ... ขอบคุณที่ชี้ให้เห็น
Ben

คำตอบ:


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' ทำไม?
1667633

3
เวลาของคุณ "1347517491247" มาจากตัวอย่างของคุณที่ไหน มันเป็นค่าเรียลไทม์ที่คุณใช้?
ron rothman

ที่จริงฉันได้รับค่านั้นจากเซิร์ฟเวอร์
bigbluebutton

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.html#time.strftimeสำหรับข้อมูลเพิ่มเติมในสตริงรูปแบบ
georg

221

คุณยังสามารถใช้datetime:

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

3
ในเขตเวลาใดที่แปลงสิ่งนี้ถ้าฉันต้องการอยู่ในเขตเวลาที่เฉพาะเจาะจง ?
garg10 พฤษภาคม

4
@ garg10may เวลายุคเป็น UTC ออฟเซต 0 เสมอดังนั้นสตริงก็จะเป็นอ็อฟเซ็ต UTC 0 ซึ่งเท่ากับเขตเวลา Zulu (+00: 00) คุณสามารถอ่านเพิ่มเติมได้ที่นี่: timeanddate.com/time/zones/z
Devnetics

6
มีฟังก์ชั่น 'utcfromtimestamp' เพื่อให้ได้เวลา UTC ใน python 3
vwvolodya

ข้อดีของการใช้คำตอบนี้คือเวอร์ชันวันที่และเวลาของstrftime()ตัวยึดตำแหน่งการจัดรูปแบบเพิ่มเติมสนับสนุนโดยเฉพาะอย่างยิ่ง% f สำหรับส่วนของไมโครวินาทีเวลา สำหรับเหตุผลที่ไม่รู้จักtime.strftime()ไม่สนับสนุนว่าแม้ว่า microseconds 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'

หมอบอกว่ามันชอบอดีต
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'

โปรดป้อน a 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)

นี่เป็นคำที่มากขึ้นเล็กน้อย แต่มันมาจากคำสั่งวันที่ในยูนิกซ์


3

บิตแรกของข้อมูลในยุคจากคน 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.