Преобразование строковой даты в метку времени и обратно в питон - PullRequest
2 голосов
/ 01 сентября 2011

Здравствуйте. Я пытаюсь взять введенную дату из jquery UI и обработать ее в базе данных как метку времени, а также прочитать ее обратно. Я знаю, что мне, вероятно, нужно использовать strftime, но я не могу понять, как это сделать.

дата указывается в формате ММ / ДД / ГГГГ

Я хотел бы преобразовать его в метку времени, а также после того, как запросы на выборку вернули его в ММ / ДД / ГГГГ

1 Ответ

6 голосов
/ 01 сентября 2011

Чтобы разобрать строку в datetime.datetime объекте:

In [23]: import datetime
In [29]: datetime.datetime.strptime('9/1/2011','%m/%d/%Y')
Out[29]: datetime.datetime(2011, 9, 1, 0, 0)

Вот небольшая диаграмма, описывающая, как выполняется преобразование datetime / timetuple / timestamp в Python:

         o------------o
         |            |  dt.datetime.utcfromtimestamp (*)
         |            |<-----------------------------------o 
         |            |                                    |
         |  datetime  |                                    |
         |            |  dt.datetime.fromtimestamp         |
         |            |<----------------------------o      |
         |            |                             |      |
         o------------o                             |      |
            |   ^                                   |      |
 .timetuple |   |                                   |      |
            |   | dt.datetime(*tup[:6])             |      |
            v   |                                   |      |
         o------------o                          o------------o
         |            |-- calendar.timegm (*) -->|            |
         |            |                          |            |
         |            |---------- time.mktime -->|            |
         |  timetuple |                          |  timestamp |
         |            |<-- time.localtime -------|            |
         |            |                          |            |
         |            |<-- time.gmtime (*)-------|            |
         o------------o                          o------------o

(*) Interprets its input as being in UTC and returns output in UTC

Итак, чтобы преобразовать его в метку времени (относительно ввода в качестве локальной даты и времени):

In [30]: import time

In [31]: time.mktime(datetime.datetime.strptime('9/1/2011','%m/%d/%Y').timetuple())
Out[31]: 1314849600.0

Чтобы преобразовать его в метку времени (относительно ввода в качестве даты и времени UTC):

In [32]: import calendar

In [33]: calendar.timegm(datetime.datetime.strptime('9/1/2011','%m/%d/%Y').timetuple())
Out[33]: 1314835200

Чтобы преобразовать его обратно в строку в формате ММ / ДД / ГГГГ:

In [34]: timestamp=1314849600.0
In [35]: datetime.datetime.fromtimestamp(timestamp).strftime('%m/%d/%Y')
Out[35]: '09/01/2011'

или (если отметка времени относится к UTC):

In [36]: datetime.datetime.utcfromtimestamp(timestamp).strftime('%m/%d/%Y')
Out[36]: '09/01/2011'
...