У меня есть строка, представляющая временную метку unix (например, «1284101485») в Python, и я хотел бы преобразовать ее в удобочитаемую дату. Когда я использую time.strftime
, я получаю ошибку TypeError
:
>>> import time> >> print time.strftime ("% B% d% Y", "1284101485") Traceback (последний вызов последним): файл "", строка 1, в TypeError: аргумент должен содержать 9 элементов последовательность, а не str
Используйте модуль datetime
:
from datetime import datetimets = int ("1284101485") # если вы столкнетесь с ошибкой "год вне допустимого диапазона", временная метка # может быть в миллисекундах, попробуйте `ts/ = 1000` в этом случае print (datetime.utcfromtimestamp (ts) .strftime ('% Y-% m-% d% H:% M:% S'))
Использовать модуль datetime
:
из импорта datetime datetimets = int ("1284101485") # если вы столкнетесь с ошибкой "год вне допустимого диапазона", временная метка # может быть в миллисекундах, попробуйте в этом случае `ts/= 1000` print (datetime.utcfromtimes tamp (ts) .strftime ('% Y-% m-% d% H:% M:% S'))
>>> from datetime import datetime >>> datetime.fromtimestamp (1172969203.1) datetime.datetime (2007, 3, 4, 0, 46, 43, 100000)
Взято из http://seehuhn.de/pages/pdate
>>> from datetime import datetime >>> datetime.fromtimestamp (1172969203.1) datetime.datetime (2007, 3, 4, 0, 46, 43, 100000)
Взято из http://seehuhn.de/pages/pdate
Самый популярный ответ предлагает использовать fromtimestamp, что является ошибкой склонен, так как использует местный часовой пояс. Чтобы избежать проблем, лучше использовать UTC:
datetime.datetime.utcfromtimestamp (posix_time) .strftime ('% Y-% m-% dT% H:% M :% SZ ')
Где posix_time — время эпохи Posix, которое вы хотите преобразовать
Самый популярный ответ предлагает использовать fromtimestamp, который подвержен ошибкам, поскольку использует местный часовой пояс. Чтобы избежать проблем, лучше использовать UTC:
datetime.datetime.utcfromtimestamp (posix_time) .strftime ('% Y-% m-% dT% H:% M :% SZ ')
Где posix_time — время эпохи Posix, которое вы хотите преобразовать
>>> время импорта >>> time.ctime (int ("1284101485")) 'Пт 10 сентября 16:51:25 2010' >>> time.strftime ( "% D% H:% M", время. localtime (int ("1284101485"))) '09/10/10 16:51'
>>> время импорта >>> time.ctime (int ("1284101485")) 'Пт, 10 сентября, 16:51:25 2010' >>> time.strftime ("% D% H:% M", time.localtime (int ("1284101485"))) '09/10/10 16:51'
Есть две части:
- Преобразование метки времени unix («секунды с эпохи») в местное время.
- Отображение местного времени в желаемый формат.
Переносимый способ получения местного времени, который работает, даже если местный часовой пояс имел другое смещение utc в прошлом, а python не имеет доступа к базе данных tz — использовать часовой пояс pytz
:
#!/usr/bin/env pythonfrom datetime import datetimeimport tzlocal # $ pip install tzlocalunix_timestamp = float ("1284101485") local_timezone = tzlocal.get_localzone () # получить pytz timezonelocal_time = datetime.fromtimestamp (unix_tim estamp, local_timezone)
Чтобы отобразить его, вы можете использовать любой формат времени, который поддерживается вашей системой, например:
print (local_time.strftime ("% Y-% m-% d% H:% M:% S.% f% z (% Z)")) print (local_time.strftime ("% B% d% Y")) # печать даты в вашем формате
Если вам не нужно местное время, чтобы вместо этого получить удобочитаемое время в формате UTC:
utc_time = datetime.utcfromtimestamp (unix_timestamp) print (utc_time.strftime ("% Y-% m-% d% H:% M:% S.% f + 00: 00 (UTC)"))
Если вас не волнуют проблемы с часовым поясом, которые могут повлиять на возвращаемая дата , или если у python есть доступ к tz в вашей системе:
local_time = datetime.fromtimestamp (unix_timestamp) print (local_time.strftime ("% Y-% m-% d% H:% M:% S.% f "))
В Python 3 вы можете получить дату и время с учетом часового пояса, используя только stdlib (смещение UTC может быть неправильным, если python не имеет доступа к tz база данных в вашей системе, например, в Windows):
# !/usr/bin/env python3from datetime import datetime, timezoneutc_time = datetime.fromtimestamp (unix_timestamp, timezone.utc) local_time = utc_time.astimezone () print (local_time.strftime ("% Y-% m-% d% H:% M:% S.% f% z (% Z) "))
Функции из модуля time
представляют собой тонкие оболочки вокруг соответствующего C API и, следовательно, они могут быть менее переносимы, чем соответствующие методы datetime
, в противном случае вы также могли бы их использовать:
#!/Usr/bin/ env pythonimport timeunix_timestamp = int ("1284101485") utc_time = time.gmtime (unix_timestamp) local_time = time.localtime (unix_timestamp) print (time.strftime ("% Y-% m-% d% H:% M:% S" , local_time)) print (время. strftime ("% Y-% m-% d% H:% M:% S + 00: 00 (UTC)", utc_time))
Есть две части:
- Преобразование метки времени unix («секунды с начала эпохи») в местное время
- Отображение местного времени в желаемом формате.
Переносимый способ получения местного времени, который работает, даже если местный часовой пояс имеет другой utc смещение в прошлом, а python не имеет доступа к базе данных tz — использовать pytz
часовой пояс:
#!/usr/bin/ env pythonfrom datetime import datetimeimport tzlocal # $ pip install tzlocalunix_timestamp = float ("1284101485") local_timezone = tzlocal.get_localzone () # get pytz timezonelocal_time = datetime.fromtimestamp (unix_timezone>
> Чтобы отобразить его, вы можете использовать любой формат времени, который поддерживается вашей системой, например:print (local_time.strftime ("% Y-% m-% d% H :% M:% S.% f % z (% Z) ")) print (local_time.strftime ("% B% d% Y ")) # печать даты в вашем формате
Если вам не нужно местное время, чтобы вместо этого получить удобочитаемое время в формате UTC:
utc_time = datetime.utcfromtimestamp (unix_timestamp) print (utc_time.strftime ("% Y-% m -% d% H:% M:% S.% f + 00: 00 (UTC) "))
Если вас не волнует проблемы с часовым поясом, которые могут повлиять на возвращаемую дату или если у python есть доступ к базе данных tz в вашей системе:
local_time = datetime.fromtimestamp (unix_timestamp) print (local_time.strftime ("% Y-% m-% d% H:% M:% S.% f"))
На Python 3 вы может получить дату и время с учетом часового пояса, используя только stdlib (смещение UTC может быть неправильным, если python не имеет доступа к базе данных tz в вашей системе, например, в Windows):
# !/usr/bin/env python3from datetime import datetime, timezoneutc_time = datetime.fromtimestamp (unix_timestamp, timezone.utc) local_time = utc_time.astimezone () print (local_time.strftime ("% Y-% m- % d% H:% M:% S.% f% z (% Z) "))
Функции из модуля
time
тонкие обертки вокруг соответствующего API C, поэтому они могут быть менее переносимыми, чем соответствующие методыdatetime
, в противном случае вы также могли бы их использовать:# !/usr/bin/env pythonimport timeunix_timestamp = int ("1284101485") utc_time = time.gmtime (unix_timestamp) local_time = time.localtime (unix_timestamp) print (time.strftime ("% Y-% m-% d% H: % M:% S ", local_time)) print (time.strftime ("% Y-% m-% d% H:% M:% S + 00: 00 (UTC) ", utc_time))
В Python 3.6+:
import datetimetimestamp = 1579117901value = datetime.datetime. fromtimestamp (отметка времени) print (f "{value:% Y-% m-% d% H:% M:% S}")
Вывод (в формате UTC)
2020-01-15 19:51:41
Пояснение
- Строка №1: импорт библиотеки datetime.
- Строка №2: время Unix, которое составляет секунды с 01.01.1970.
- Строка №3: преобразует это в unix time, проверьте с помощью:
type(value)
- Строка № 4: печать в том же формате, что и strp.
Бонус
Чтобы сохранить дату в строке, а затем распечатать ее, используйте это:
my_date = f "{value:% Y-% m-% d% H:% M:% S} "print (my_date)
В Python 3.6+:
import datetimetimestamp = 1579117901value = datetime.datetime.fromtimestamp (timestamp) print (f "{value:% Y-% m- % d% H:% M:% S} ")
Вывод (в формате UTC)
15.01.2020 19:51:41
Пояснение
- Строка №1: Импортировать библиотеку datetime.
- Строка №2: время Unix, которое составляет секунды с 01.01.1970.
- Строка №3: преобразует это в объект времени unix, проверьте с помощью:
type(value)
- Строка № 4: печать в том же формате, что и strp.
Бонус
Чтобы сохранить дату в строке, а затем распечатать ее, используйте это:
my_date = f "{value:% Y-% m -% d% H:% M:% S} "print (my_date)
Для удобочитаемой метки времени из метки времени UNIX я использовал это в сценариях раньше:
import os, datetimedatetime.datetime.fromtimestamp (float (os.path.getmtime (" FILE "))). Strftime ("% B% d,% Y ")
Вывод:
’26 декабря 2012 г.’
Для удобочитаемой метки времени из метки времени UNIX я раньше использовал это в сценариях:
import os, datetimedatetime.datetime.fromtimestamp (float (os .path.getmtime ("FILE"))). strftime ("% B% d,% Y")
Вывод:
‘декабрь 26, 2012 ‘
Кроме использования пакета time/datetime , pandas также можно использовать для решения той же проблемы. Вот как мы можем использовать pandas для преобразования timestamp в читаемая дата :
Временные метки могут быть в двух форматах:
-
13 цифр (миллисекунды ) -Чтобы преобразовать миллисекунды в дату, используйте:
import pandasresult_ms = pandas.to_datetime ('1493530261000', unit = 'ms') str (result_ms) Вывод: '2017-04-30 05:31:01'
-
10 цифр (секунд) — для преобразования секунд до настоящего времени, используйте:
import pandasresult_s = pandas. to_datetime ('1493530261', unit = 's') str (result_s) Вывод: '2017-04-30 05:31:01'
Помимо использования пакета time/datetime , pandas также можно использовать для решения той же проблемы. Вот как мы можем использовать pandas для преобразования timestamp в читаемую дату :
Метки времени могут быть в двух форматах:
-
13 цифр (миллисекунды). Чтобы преобразовать миллисекунды к дате, используйте:
import pandasresult_ms = pandas.to_datetime ('1493530261000', unit = 'ms') str (result_ms) Вывод: '2017-04-30 05:31:01'
-
10 цифр (секунд) -Чтобы преобразовать секунды в дату, используйте:
import pandasresult_s = pandas.to_datetime ('1493530261', unit = 's') str (result_s) Вывод: '2017-04-30 05:31:01'
Вы можете преобразовать текущее время следующим образом
t = datetime.fromtimestamp (time.time ()) t.strftime ( '% Y-% m-% d') '2012-03-07'
Для преобразования даты в строке в разные форматы.
import datetime, timedef createDateObject (str_date, strFormat = "% Y-% m-% d"): timeStamp = time.mktime (time.strptime (str_date, strFormat)) return datetime.datetime.fromtimestamp (timeStamp ) def FormatDate (objectDate, strFormat = "% Y-% m-% d"): return objectDate.strftime (strFormat) Использование ===== o = createDateObject ('2013-03-03') print FormatDate (o, '% d-% m-% Y') Вывод 03-03-2013
Вы можете преобразовать текущее время следующим образом
t = datetime.fromtimestamp (time.time ()) t.strftime ('% Y-% m-% d') '2012-03-07'
Для преобразования даты в строке в разные форматы.
import datetime, timedef createDateObject ( str_date, strForm at = "% Y-% m-% d"): timeStamp = time.mktime (time.strptime (str_date, strFormat)) return datetime.datetime.fromtimestamp (timeStamp) def FormatDate (objectDate, strFormat = "% Y-% m-% d "): return objectDate.strftime (strFormat) Использование ===== o = createDateObject ('2013-03-03') print FormatDate (o, '% d-% m-% Y') Выход 03 -03-2013
timestamp = "124542124" value = datetime .datetime.fromtimestamp (timestamp) exct_time = value.strftime ('% d% B% Y% H:% M:% S')
Получите читаемую дату из временной метки с помощью время также, также вы можете изменить формат даты.
timestamp = "124542124" значение = datetime.datetime. fromtimestamp (timestamp) exct_time = value.strftime ('% d% B% Y% H:% M:% S')
Получите читаемую дату из временной метки со временем, также вы можете изменить формат даты.
import datetimetemp = datetime.datetime .fromtimestamp (1386181800) .strftime ('% Y-% m-% d% H:% M:% S') температура печати
import datetimetemp = datetime.datetime.fromtimestamp (1386181800) .strftime ('% Y-% m-% d% H:% M:% S') print temp
Другой способ сделать это с помощью gmtime и функции форматирования;
from time import gmtimeprint ('{} - {} - {} {}: {}: {}'. format (* gmtime (1538654264.703337)))
Вывод: 4.10.2018 11:57:44
Другой способ сделать это можно ing gmtime и функция форматирования;
from time import gmtimeprint ('{} - {} - {} {}: {}: {}'. format (* gmtime (1538654264.703337 )))
Вывод: 2018-10-4 11:57:44
Я только что успешно использовал:
>>> type (tstamp) pandas.tslib.Timestamp >>> newDt = tstamp.date () >>> type (newDt) datetime.date
Я только что успешно использовал:
>>> type (tstamp) pandas.tslib.Timestamp >>> newDt = tstamp.date () >>> type (newDt) datetime.date
Обратите внимание, что utcfromtimestamp
сбивает с толку и может привести к неожиданным результатам из-за наивный объект datetime. Лучше быть явным и установить аргумент tz
в fromtimestamp
:
from datetime import datetime, timezonedtobj = datetime .fromtimestamp (1284101485, timezone.utc) print (dtobj.isoformat ()) print (repr (dtobj)) # 2010-09-10T06: 51: 25 + 00: 00 # datetime.datetime (2010, 9, 10, 6 , 51, 25, tzinfo = datetime.timezone.utc)
Без указания часового пояса (tz) приведет к наивному datetime , который Python обрабатывает как местное время — в то время как время UNIX относится к UTC.
Обратите внимание, что utcfromtimestamp
сбивает с толку и может привести к неожиданным результатам из-за полученного наивного объекта datetime. Лучше быть явным и установить аргумент tz
в fromtimestamp
:
from datetime import datetime, timezonedtobj = datetime .fromtimestamp (1284101485, timezone.utc) печать (dtobj. isoformat ()) print (repr (dtobj)) # 2010-09-10T06: 51: 25 + 00: 00 # datetime.datetime (2010, 9, 10, 6, 51, 25, tzinfo = datetime.timezone.utc)
Отсутствие указания часового пояса (tz) приведет к naive datetime , который Python обрабатывает как местное время , а время UNIX относится к UTC.
быстрый и грязный лайнер:
'-'. join ( str (x) для x в списке (tuple (datetime.datetime.now (). timetuple ()) [: 6]))
‘2013-5-5-1 -9-43 ‘
быстрый и грязный лайнер:
'-'. join (str (x) для x в списке (tuple (datetime.datetime.now (). timetuple ()) [: 6]))
‘2013-5-5 -1-9-43 ‘
Для упрощения вы можете использовать easy_date:
import date_convertermy_date_string = date_converter.timestamp_to_str ing (1284101485, "% B% d,% Y")
Вы можете использовать easy_date, чтобы упростить задачу:
import date_convertermy_date_string = date_converter.timestamp_to_string (1284101485, "% B% d,% Y")