Як отримати секунди з епохи від часу + дати виведення gmtime ()?


162

Як ви робите зворотній бік gmtime(), де ви вводите час + дату і отримуєте кількість секунд?

У мене є такі струни 'Jul 9, 2009 @ 20:02:58 UTC', і я хочу повернути кількість секунд між епохою та 9 липня 2009 року.

Я спробував, time.strftimeале не знаю, як правильно його використовувати, або якщо це правильна команда для використання.

Відповіді:


123

Якщо ви потрапили сюди, тому що пошукова система сказала вам, що це, як отримати часову позначку Unix, перестаньте читати цю відповідь. Прокрутіть одну вниз.

Якщо ви хочете повернути назад time.gmtime(), ви хочете calendar.timegm().

>>> calendar.timegm(time.gmtime())
1293581619.0

Ви можете перетворити рядок у часовий кортеж time.strptime(), який повертає часовий набір, який ви можете передати calendar.timegm():

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

Більше інформації про модуль календаря тут


16
Якщо ви шукаєте поточний час Unix, зверніться до коментаря @ DanJ або до відповіді naren, ця відповідь невірна!
kosii

641

Використовуйте модуль часу :

epoch_time = int(time.time())

14
@DanJ: це кількість минулих секунд після Епохи (фіксований момент часу), і вона однакова в будь-якому часовому поясі. Хоча якщо ми ігноруємо часові випадки навколо високосних секунд; його легко перетворити на UTC, якщо timeвикористовується епоха Unix (1970).
jfs

43
Зауважте, це не те, що просила ОП, але це те, що я хотів. Так +1.
безстрашний_фул

6
це відповідь на те, що задається в заголовку: "отримання часу з епохи". +1
AlejandroVD

@JFSebastian це дає епоху на секунди. Як я можу отримати роздільну здатність до мілісекунд, використовуючи ту саму вище відповідь?
Марлон Абейкон

2
щоб розширити свій коментар вище : time.time()значення НЕ залежить від локального часового поясу (якщо виключити "правильні" часові пояси тощо), наприклад, якщо він повертає час POSIX (як це робиться для більшості систем), то це кількість SI секунд, оскільки епоха (1970-01-01UTC), не рахуючи високосних секунд. Це значення можна перетворити на UTC (без урахування високосних секунд), але це не UTC . @MarlonAbeykoon: Мені подобається ця відповідь
jfs

10

Зверніть увагу, що time.gmtimeпозначки часу 0на 1970-1-1 00:00:00.

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) дає часову позначку, зміщену на величину, яка залежить від вашої місцевості, яка, як правило, не може бути 0.

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

Зворотний time.gmtimeIS calendar.timegm:

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

Це дає кращі пояснення та приклад time.mktime (які враховують поточний часовий пояс), дякую
Jkm

@Jkm: не використовуйте mktime()з gmtime(). mktime()приймає ваш місцевий час, але gmtime()повертається час UTC - ваш місцевий часовий пояс може і, ймовірно, буде іншим. "часова мітка відносно вашої мови" не має сенсу: часова марка POSIX не залежить від вашої локальної точки (локальний часовий пояс) - це однакове значення у всьому світі. "секунди з епохи" в більшості випадків (навіть у Windows) - часова мітка POSIX - такі речі, як "правильні" часові пояси, які використовують часовий масштаб TAI, не є поширеними. Див. Чи повертає місце time.time () Python локальну або часову позначку UTC?
jfs

@JF Себастьян Ви маєте рацію. Насправді у мене є кілька питаньmktime() нещодавно . Для деяких веб-серверів python (наприклад, Tornado), оскільки процес триває, навіть якщо я змінюю локальну систему, mktime()виклик API веб-сервера все ще використовує старий часовий пояс для створення часового об'єкта. Я маю перейти на gmtime()та вручну застосувати компенсацію GMT.
Jkm


3
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

Я не можу отримати доступ до strptime чомусь. Я імпортував дату
calccrypto

1
@calccrypto ви повинні from datetime import datetimeабо робитиdatetime.datetime.strptime
pathikrit

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.