Преобразование строки временной метки unix в читаемую дату

У меня есть строка, представляющая временную метку 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'  

Есть две части:

  1. Преобразование метки времени unix («секунды с эпохи») в местное время.
  2. Отображение местного времени в желаемый формат.

Переносимый способ получения местного времени, который работает, даже если местный часовой пояс имел другое смещение 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))  


Есть две части:

  1. Преобразование метки времени unix («секунды с начала эпохи») в местное время
  2. Отображение местного времени в желаемом формате.

Переносимый способ получения местного времени, который работает, даже если местный часовой пояс имеет другой 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 в читаемая дата :

Временные метки могут быть в двух форматах:

  1. 13 цифр (миллисекунды ) -Чтобы преобразовать миллисекунды в дату, используйте:

      import pandasresult_ms = pandas.to_datetime ('1493530261000', unit = 'ms')  str (result_ms) Вывод: '2017-04-30 05:31:01'  
  2. 10 цифр (секунд) — для преобразования секунд до настоящего времени, используйте:

      import pandasresult_s = pandas. to_datetime ('1493530261', unit = 's') str (result_s) Вывод: '2017-04-30 05:31:01'  


Помимо использования пакета time/datetime , pandas также можно использовать для решения той же проблемы. Вот как мы можем использовать pandas для преобразования timestamp в читаемую дату :

Метки времени могут быть в двух форматах:

  1. 13 цифр (миллисекунды). Чтобы преобразовать миллисекунды к дате, используйте:

      import pandasresult_ms = pandas.to_datetime ('1493530261000', unit = 'ms') str (result_ms) Вывод: '2017-04-30 05:31:01'  
  2. 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")  

Оцените статью
techsly.ru
Добавить комментарий