В Python, даты являются объектами. Поэтому при управлении ими Вы управляете объектами, не строками, не метками времени, ни чем-либо.
Любой объект в Python имеют ДВА строковых представления:
регулярное представление, которое используется "печатью", может быть, получают использование эти str()
функция. Это - большую часть времени наиболее распространенный человекочитаемый формат и используется для упрощения дисплея. Так str(datetime.datetime(2008, 11, 22, 19, 53, 42))
дает Вам '2008-11-22 19:53:42'
.
альтернативное представление, которое используется для представления объектной природы (как данные). Это может быть, получают использование эти repr()
функция, и удобно знать, какие данные Ваше управление, в то время как Вы разрабатываете или отлаживаете. repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
дает Вам 'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
то, Что произошло, - то, что при печати даты с помощью "печати" она использовала str()
, таким образом, Вы видели хорошую строку даты. Но когда Вы распечатали mylist
, Вы распечатали список объектов, и Python пытался представить набор данных, с помощью [1 113].
ну, когда Вы управляете датами, продолжают использовать объекты даты все долго путь. Они получили тысячу полезных методов, и большая часть API Python ожидают, что даты будут объектами.
, Когда Вы захотите отобразить их, просто используйте str()
. В Python хорошая практика должна явно бросить все. Таким образом как раз в то самое время, когда пора распечатать, получить строковое представление Вашей даты с помощью [1 115].
Одна последняя вещь. Когда Вы пытались распечатать даты, Вы распечатали mylist
. Если Вы хотите распечатать дату, необходимо распечатать объекты даты, не их контейнер (список).
, НАПРИМЕР, Вы хотите распечатать всю дату в списке:
for date in mylist :
print str(date)
Примечание, что в том конкретном случае , можно даже опустить str()
, потому что печать будет использовать его для Вас. Но это не должно становиться привычкой:-)
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
, Даты имеют представление по умолчанию, но можно хотеть распечатать их в определенном формате. В этом случае можно получить представление пользовательской строки с помощью strftime()
метод.
strftime()
ожидает строковый шаблон, объясняющий, как Вы хотите отформатировать свою дату.
, НАПРИМЕР:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Вся буква после "%"
представляют формат для чего-то:
%d
день номер %m
, месяц номер %b
, сокращение месяца %y
, год, последний, две цифры %Y
год и т.д.
, Взглянули на официальную документацию , или справочник McCutchen, Вы не можете знать их всех.
С тех пор PEP3101, каждому объекту мог использовать его собственный формат автоматически формат метода любой строки. В случае даты и времени формат является тем же, используемым в strftime. Таким образом, можно сделать то же как выше подобного это:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
преимущество этой формы состоит в том, что можно также преобразовать другие объекты одновременно. , Даты могут автоматически адаптироваться к местному языку и культуре, если Вы используете их правильный путь, но это немного сложно. Возможно, для другого вопроса на ТАК (Переполнении стека);-)
С введением [1 129] литералы Отформатированной строки (начиная с Python 3.6, 2016-12-23) это может быть записано как [1 161] import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Локализация
Поскольку загрузка файла commons зависит от commons-io . Добавьте это в свой путь к классам.
Просто примечание - ваш запрос к базе данных заставляет меня немного съеживаться. Кажется уязвимым для утечек памяти, если объекты Statement и ResultSet не закрыты, а также для атак путем внедрения, поскольку вы копируете ввод прямо в запрос.
PreparedStatement select = null;
ResultSet rs = null;
try { con.prepareStatement("SELECT * FROM registered_students WHERE username = ?");
select.setString(1, username);
rs = select.executeQuery();
} finally {
if (select != null) select.close();
if (rs != null) rs.close();
}