Конвертировать дату между ДД / ММ / ГГГГ и ГГГГ-ММ-ДД? - PullRequest
26 голосов
/ 02 февраля 2009

Используя скрипт Python, мне нужно прочитать CVS-файл, в котором даты отформатированы как ДД / ММ / ГГГГ, и преобразовать их в ГГГГ-ММ-ДД, прежде чем сохранить их в базе данных SQLite.

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

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

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

Ответы [ 4 ]

53 голосов
/ 02 февраля 2009

Ваш пример кода неверен. Это работает:

import datetime

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

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

13 голосов
/ 02 февраля 2009

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

lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime('%Y-%m-%d')
4 голосов
/ 26 января 2017

Я новичок в программировании. Я хотел конвертировать из 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).

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

4 голосов
/ 02 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...