当我在网页中的日期范围过滤器(往返日期)中输入00/00/0000时,它将保存为11/30/0002。
我正在尝试使用setLenient(false)
,但没有运气。这是代码的一部分。希望能帮助到你。我包含了网页代码,它接受来自支持bean的值和代码。
XHTML页面代码:
<h:panelGroup layout="block" styleClass="myWorkDate">
<h:commandLink action="#{myFollowupBean.startRangeFilter}" id="lnkDateRange" value="#{myFollowupBean.rangeFilter.display}" />
</h:panelGroup>
MyFollowUpBean.java:Bean文件
支持bean中的代码。弹出对话框以显示日期范围过滤器。 当我输入零时,它保存为11/30/0002并处理请求而不是给出错误 RangeFilterVO - 日期的模型类
public void startRangeFilter() {
Command saveCommand = new Command() {
@Override
public String execute(Object returnObject) {
RangeFilterVO vo = (RangeFilterVO)returnObject;
rangeFilter.setFromDate(vo.getFromDate());
rangeFilter.setToDate(vo.getToDate());
searchAll();
fetch();
return null;
}
};
CalendarRangeFilterDialog dialog = new CalendarRangeFilterDialog();
dialog.setWidth(300);
try {
RangeFilterVO param = (RangeFilterVO) BeanUtils
.cloneBean(rangeFilter);
dialog.setVo(param);
} catch (IllegalAccessException | InstantiationException
| InvocationTargetException | NoSuchMethodException e) {
}
DialogFrame.displayDialog(dialog, saveCommand);
}
DateTimeConverter.java:
public static String getDatePattern(){
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, FacesUtils.getLocale());
String datePattern = ((SimpleDateFormat) dateFormat).toPattern();
Date myDate;
try {
if(myDate == dateFormat.parse(datePattern)){
if (datePattern.indexOf("MM") == -1){
datePattern = StringUtils.replace(datePattern, "M", "MM");
}
if (datePattern.indexOf("dd") == -1){
datePattern = StringUtils.replace(datePattern, "d", "dd");
}
if (datePattern.indexOf("yyyy") == -1){
datePattern = StringUtils.replace(datePattern, "yy", "yyyy");
}
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return datePattern;
}
有人可以向我解释一下这个吗?
答案 0 :(得分:4)
这是将零置于基于一个字段的字段中的工件。它会自动更正前一个单元的末尾。
所以,0000年= 0 AD / CE = 1 BC / BCE。
第1年的“第0个月”BCE成为上一年的最后一个月:12月,公元前2年。
同样,12月的“第0天”成为上个月的最后一天:11月30日。
因此,00/00/0000被更正为公元前2月31日。你的格式没有适合这个时代的领域,所以你的显示器失去了它是BCE年的事实。
如果您希望解析器拒绝超出正常范围的值,只需在调用dateFormat.setLenient(false)
之前调用dateFormat.parse()
;请注意,解析器将在给定此类日期时引发异常。