2013-03-07 63 views
1

У меня есть PostgreSql, который создает временную метку с часовым поясом для каждой строки. Но теперь, когда я пытаюсь распечатать эту метку времени, я получаю следующее: «2013-03-06 00: 00: 00 + 01: 00»Конвертировать UTC Временная метка в обычную дату и timr

Во-первых, почему это говорит 00:00:00?

Во-вторых, как я мог бы превратить его в такую ​​вещь:

06.03.2013 7:10:13

Или

Для примера: "12 сек назад", «1 день и час назад»

Спасибо Marvin

ответ

1

Вы должны использовать datetime модуля питона. Из этого модуля вы можете преобразовать строку в дату и форматировать эту дату.

>>> from datetime import datetime 
>>> datetime.strptime('06.03.2013 07:10:13', '%d.%m.%Y %H:%M:%S').strftime('%Y-%d-%m %H:%M:%S%Z') 
'2013-06-03 07:10:13' 
1

Вы получили 00:00:00 как время часть, вероятно, потому, что кто-то вставить только дату без времени части. Смотрите результаты:

select current_date, current_timestamp; 

вы получите:

"2013-03-07";"2013-03-07 08:31:59.098661+01" 

При вставке или обновлении временной метки столбца только с датой, то время часть будет сокращена до 00:00:00. Вы должны использовать current_timestamp, если хотите дату, время и часовой пояс.

Преобразование такой даты для строки может быть выполнено как на стороне сервера, так и на стороне клиента. Существует много PostgreSQL datetime functions, PostgreSQL format functions, которые могут быть использованы, а также функции Python.

С:

select to_char(current_timestamp, 'DD.MM.YY HH12:MI:SS') 

вы получите что-то вроде:

"07.03.13 08:40:50" 

Lafada ответ охватывает Python форматирования объектов DateTime.

Если вы хотите, чтобы показать разницу между сейчас и некоторые даты и времени вы можете использовать PostgreSQL age() функция:

select age(timestamp '2003-03-01'); 

результат:

"10 years 6 days" 

, конечно, Python также может показать разницу между временными метками:

import datetime 
dt_old = datetime.datetime.strptime('2001-12-31 22:33:44', '%Y-%m-%d %H:%M:%S') 
dt_diff = (datetime.datetime.today() - dt_old) 
print(dt_diff) 

Мой результат:

4083 days, 10:16:14.140000 
+0

Благодарим за отличный ответ :) ..я не вставляю что-то в столбец timestamp, я сконфигурировал его так: добавлено TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ' –

+0

Функция postgreSQL' now() 'возвращает дату со временем, но в вашей декларации она будет использоваться только если кто-то не установил значение для этого столбца в инструкции INSERT. Вы должны искать INSERT в своем приложении. Также лучше использовать 'CURRENT_TIMESTAMP' вместо PostgreSQL: конкретный' now() '-' CURRENT_TIMESTAMP' будет работать с другими базами данных, которые я знаю. –

Смежные вопросы