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

У меня есть строка, представляющая временную метку unix (например, "1284101485") в Python, и я'хочу преобразовать ее в читаемую дату. Когда я использую time.strftime, я получаю TypeError:

>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str
Комментарии к вопросу (1)

Используйте модуль datetime:

from datetime import datetime
ts = int("1284101485")

# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
Комментарии (11)
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

Взято с сайта http://seehuhn.de/pages/pdate

Комментарии (0)

Наиболее проголосовавший ответ предполагает использование fromtimestamp, который подвержен ошибкам, поскольку использует локальный часовой пояс. Чтобы избежать проблем, лучше использовать UTC:

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')

Где posix_time - это эпоха Posix, которую вы хотите преобразовать

Комментарии (2)
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'
Комментарии (1)

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

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

Портативный способ получить работающее локальное время, даже если в прошлом локальный часовой пояс имел другое смещение utc, а python не имел доступа к базе данных tz, - использовать часовой пояс pytz:

#!/usr/bin/env python
from datetime import datetime
import tzlocal  # $ pip install tzlocal

unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)

Чтобы отобразить его, вы можете использовать любой формат времени, который поддерживается вашей системой, например,.:

print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y"))  # print date in your format

Если вам не нужно местное время, вместо этого вы получите читаемое время 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 python3
from datetime import datetime, timezone

utc_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 python
import time

unix_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))  
Комментарии (1)

Для удобочитаемой метки времени из метки времени UNIX я использовал это в скриптах раньше:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Вывод:

«26 декабря 2012 года»

Комментарии (0)

Вы можете преобразовать текущее время, как это

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

Преобразовать дату в строке в разные форматы.

import datetime,time

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

Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')

Output 03-03-2013
Комментарии (0)

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

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

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

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

    импортировать панды
    result_s = pandas.to_datetime ('1493530261', unit = 's')
    str (result_s)
    
    Выход: '2017-04-30 05:31:01'
Комментарии (0)

& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >

timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

& Лт;!- конец фрагмента - >

Получите читаемую дату из отметки времени также со временем, также вы можете изменить формат даты.

Комментарии (3)

Еще один способ сделать это с помощью функции gmtime и форматирования ;

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

Выход: 2018-10-4 11:57:44

Комментарии (0)
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
Комментарии (0)

я просто успешно использовал:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
Комментарии (0)

Вы можете использовать easy_date, чтобы упростить:

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
Комментарии (4)

быстрый и грязный один лайнер:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'

Комментарии (4)