JSP - Загрузка файла с Apache палата общин

ПОЧЕМУ: даты являются объектами

В 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'

Локализация

, Даты могут автоматически адаптироваться к местному языку и культуре, если Вы используете их правильный путь, но это немного сложно. Возможно, для другого вопроса на ТАК (Переполнении стека);-)

8
задан skaffman 18 May 2012 в 15:43
поделиться

2 ответа

Поскольку загрузка файла commons зависит от commons-io . Добавьте это в свой путь к классам.

11
ответ дан 5 December 2019 в 13:00
поделиться

Просто примечание - ваш запрос к базе данных заставляет меня немного съеживаться. Кажется уязвимым для утечек памяти, если объекты 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();
}
2
ответ дан 5 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: