Я не осознавал этого, но, очевидно, функция Python strftime
не поддерживает даты до 1900 года:
>>> from datetime import datetime
>>> d = datetime(1899, 1, 1)
>>> d.strftime('%Y-%m-%d')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year=1899 is before 1900; the datetime strftime() methods require year >= 1900
Я уверен, что сам мог бы что-то взломать, чтобы сделать это, но я думаю, что функция strftime
существует по причине (и есть также причина, по которой она не может поддерживать даты до 1900 года). Мне нужно иметь возможность поддерживать даты до 1900 года. Я бы просто использовал str
, но вариантов слишком много. Другими словами, он может иметь или не иметь микросекунды или может иметь или не иметь часовой пояс. Есть ли какое-то решение для этого?
Если это имеет значение, я делаю это так, чтобы я мог записать данные в текстовый файл и загрузить их в базу данных, используя Oracle SQL * Loader.
Я, по сути, закончил тем, что делал ответ Алекса Мартелли. Вот более полная реализация:
>>> from datetime import datetime
>>> d = datetime.now()
>>> d = d.replace(microsecond=0, tzinfo=None)
>>> str(d)
'2009-10-29 11:27:27'
Единственное отличие состоит в том, что str(d)
эквивалентно d.isoformat(' ')
.