Я не согласен с другим ответом. Настоящая причина проблемы заключается в том, что DateFormat не предназначен для обработки строк дат, отличных от США.
Стандартные функции даты CF всегда используют правила синтаксического анализа даты США. Это означает, что когда вы передаете неоднозначную строку даты, например 01-05-2013
, она анализируется в соответствии с США Английские соглашения о датах. В этом случае сначала месяц, т.е. "мм-дд-гггг". Так что результатом всегда будет 5 января, а не 1 мая.
В некоторых случаях вам повезет. Со строкой 15-05-2013
, очевидно, нет 15-го месяца, поэтому CF/java должен автоматически поменять местами месяц и день, а не выдавать ошибку. Вот почему кажется правильно обрабатывать некоторые строки даты dd-mm-yyyy
, но не другие.
Если вы хотите анализировать строки дат, отличные от США, вместо этого следует использовать функции даты LS (локальные настройки). Однако, согласно документам, тире, т.е. "-"
, не являются стандартным разделителем даты в большинстве неамериканских языков: только в голландском и португальском (стандарт). Таким образом, вам нужно либо изменить разделитель, либо использовать одну из этих двух локалей при разборе даты:
lsDateFormat( myDate, "yyyy-mm-dd", "pt_PT")
Примечание:
Кроме того, DateFormat
действительно ожидает дату object. Однако, как и большинство функций в CF, он достаточно гибок, чтобы принимать строку даты. Это позволяет вам использовать его как ленивый ярлык для преобразования даты string => date object =>, а затем обратно в (форматированную) строку даты снова. Использование объектов даты предпочтительнее (и вам действительно следует проверять строки даты), но это совсем другой разговор...
person
Leigh
schedule
15.05.2013