這不是一個錯誤。這就是SimpleDateFormat
的工作原理。下面是從鏈接的javadoc一個引用的相關性:
- 年份:如果格式化的
Calendar
是公曆,下面的規則。
- ...
- 用於解析,如果模式字母的數量爲2個以上,全年字面解釋,無論位數的數字。因此使用模式 「MM/DD/YYYY」, 「01/11/12」 解析到12年1月11日AD
- ...
的JSF <f:convertDateTime>
只是用它在蓋子下面。您最好的選擇是延長DateTimeConverter
並驗證提交的值的長度,然後再傳遞給真實的DateTimeConverter
。你不能去創建一個自定義轉換器,但它畢竟非常簡單。
@FacesConverter("myDateTimeConverter")
public class MyDateTimeConverter extends DateTimeConverter {
public MyDateTimeConverter() {
setPattern("MM/dd/yyyy");
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && value.length() != getPattern().length()) {
throw new ConverterException("Invalid format");
}
return super.getAsObject(context, component, value);
}
}
如下使用它:
<h:inputText ... converterMessage="Please enter date in MM/dd/yyyy format">
<f:converter converterId="myDateTimeConverter" />
</h:inputText>
請注意,我固定在模式mm
(分鐘)是MM
(個月)。
' '使用'java.text.SimpleDateFormat',所以它將使用您指定的任何SimpleDateFormat兼容模式以'pattern'屬性。如果你想要一個兩位數的年份,那麼使用'mm/dd/yy'。如果您希望該字段支持多種格式,那麼標準的 轉換器不是您想要的。我不知道任何多格式轉換器,但我不明白爲什麼不能做。儘管這聽起來有點有趣。今年轉換爲4位數年份的問題是什麼? –
pgreen2