2009-02-02 2 views
20

Используя скрипт Python, мне нужно прочитать файл CVS, где даты формируются как DD/MM/YYYY, и конвертировать их в YYYY-MM-DD, прежде чем сохранять их в базе данных SQLite.Преобразование даты между DD/MM/YYYY и YYYY-MM-DD?

Это почти работает, но терпит неудачу, потому что я не предоставлю время:

from datetime import datetime 

lastconnection = datetime.strptime("21/12/2008", "%Y-%m-%d") 

#ValueError: time data did not match format: data=21/12/2008 fmt=%Y-%m-%d 
print lastconnection 

Я предполагаю, что есть метод в объекте даты и времени, чтобы выполнить это преобразование очень легко, но я не могу найти пример как это сделать. Спасибо.

ответ

11

сначала нужно будет преобразовать строку в даты и времени кортеж, а затем преобразовать эту DATETIME кортеж в строку, она будет идти, как это:

lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime('%Y-%m-%d') 
+0

Говорить «кортеж» кажется немного запутанным; как из Python 2.2, 'strptime()' [возвращает «struct_time'»] (http://docs.python.org/library/time.html#time.strptime), который [является объектом] (http: //docs.python.org/library/time.html#time.struct_time) с интерфейсом «named tuple». – supervacuo

43

Ваш пример кода является неправильным. Это работает:

import datetime 

datetime.datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d") 

Вызов strptime() разбирает первый аргумент в соответствии с форматом, указанным во втором, так что те два должны совпадать. Затем вы можете вызвать strftime(), чтобы форматировать результат в желаемый окончательный формат.

3

Кто-нибудь еще считает, что это отходы для преобразования этих строк в объекты даты/времени для того, что является, в конце концов, простым преобразованием текста? Если вы уверены, что входящие даты будут действительны, вы можете просто использовать:

>>> ddmmyyyy = "21/12/2008" 
>>> yyyymmdd = ddmmyyyy[6:] + "-" + ddmmyyyy[3:5] + "-" + ddmmyyyy[:2] 
>>> yyyymmdd 
'2008-12-21' 

Это почти наверняка будет быстрее, чем преобразование в и от даты.

+8

Если вы беспокоитесь о скорости конвертирования на сегодняшний день, вам явно нечего беспокоиться об этом. Код, отправленный разматыванием, намного яснее и удобнее, чем ваш. Это должно быть вашей главной заботой здесь, а не скоростью. –

+0

Я пропустил возможность проголосовать за этот комментарий. –

1

Я новичок в программировании. Я хотел конвертировать из yyyy-mm-dd в dd/mm/yyyy, чтобы распечатать дату в формате, который используют и распознают люди в моей части мира.

Принятый ответ поднял меня на правильном пути.

Ответ, который я закончил с моей проблемой является:

import datetime 

today_date = datetime.date.today() 
print(today_date) 

new_today_date = today_date.strftime("%d/%m/%Y") 
print (new_today_date) 

Первые две строки после того, как оператор импорта дает текущую дату в формате США (2017-01-26). Последние две строки преобразуют это в формат, признанный в Великобритании и других странах (26/01/2017).

Вы можете сократить этот код, но я оставил его как есть, потому что он полезен для меня как новичок. Надеюсь, это поможет начинающим программистам начать!

+0

Приветствуем вас в StackOverflow. Ваш ответ на самом деле не связан с вопросом, касающимся конверсии из «DD/MM/YYYY» в «YYYY-MM-DD». Ваш пост может быть удален, однако я рекомендую вам оставаться активным на сайте. Благодаря! – lrnzcig

+0

@lrnzcig Спасибо за ваш комментарий. Я понимаю что ты имеешь ввиду. Возможно, я должен был опубликовать свой вопрос и позволить кому-то ответить на него - до сих пор у меня было много вопросов, но мне удалось ответить на них, посмотрев онлайн и в моей надежной книге python – Mark

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