Преобразование временной метки строки в Python datetime (было: как правильно преобразовать char в float или double в Python) - PullRequest
1 голос
/ 29 ноября 2011

Здесь у меня есть строка, подобная этой "1322485986.672901000", тип данных - строка, представляющая время unixtime. Я хочу преобразовать его в datetime в Python.

Я использовал date = datetime.fromtimestamp(float(row[0])) row [0], представляющий значение, подобное этому 1322485986.672901000, так как у меня есть несколько строк. Результат преобразования неверен, он только вычисляет цифры перед точкой. Таким образом, дата после преобразования выглядит как 2011-11-28 13: 53: 23.6729

Я думаю, что проблема float(row[0]), но я не знаю, как решить эту проблему, или кто-нибудь знает, как лучше конвертировать unixtime в datetime?

Большое спасибо!

Теперь я получил результат 2011-11-28 14: 13: 06.672901

Но при использовании онлайн-конвертера результат 2011-11-28 13: 13: 06

Ответы [ 3 ]

4 голосов
/ 29 ноября 2011

Ваша часовая разница в текущем результате, вероятно, является следствием применения часового пояса.

Вы можете указать явный часовой пояс, если вам нужно - документы по объектам tzinfo может направить вас прямо на создание объекта часового пояса, и после его создания вы просто передаете аргумент:

from datetime import datetime, tzinfo, timedelta

timestamp = "1322485986.672901000"

class UTC(tzinfo):
    def utcoffset(self, dt):
         return timedelta(0)
    def tzname(self, dt):
        return "UTC"
    def dst(self, dt):
        return timedelta(0)


d1 = datetime.fromtimestamp(float(timestamp), UTC())
print d1

Этот код печатается 2011-11-28 13: 13: 06.672901 + 00: 00для меня.

3 голосов
/ 29 ноября 2011
from datetime import datetime

timestamp = "1322485986.672901000"

d1 = datetime.fromtimestamp( float(timestamp) )
print d1

d2 = datetime.fromtimestamp( int(float(timestamp) ) )
print d2

Выход:

2011-11-28 05:13:06.672901
2011-11-28 05:13:06
0 голосов
/ 04 мая 2012
# timestamp to time tuple in UTC
    timestamp = 1226527167.595983
    time_tuple = time.gmtime(timestamp)
    print repr(time_tuple)

# timestamp to time tuple in local time
    timestamp = 1226527167.595983
    time_tuple = time.localtime(timestamp)
    print repr(time_tuple)
...