9

当我在网页的日期范围过滤器(到和从日期)中输入 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;
}

任何人都可以向我解释一下吗?

4

1 回答 1

11

这是将零放入基于 1 的字段中的人工制品。它会自动更正到前一个单元的末尾。

普通时代,传统上没有“0年”;1 AD/CE 的前一年是 1 BC/BCE。因此,您输入的 0000 年变为公元前 1 年。

那么公元前 1 年的“0 月”就变成了上一年的最后一个月:公元前 2 年 12 月。

同样,12 月的“第 0 天”成为上个月的最后一天:11 月 30 日。

因此,00/00/0000 被更正为公元前 2 年 11 月 30 日。您的格式没有该时代的字段,因此您的显示在结果“11/30/0002”中丢失了它是 BCE 年的事实。

如果您更喜欢解析器拒绝超出正常范围的值,请在调用dateFormat.setLenient(false)之前调用dateFormat.parse();请注意,解析器将在给定此类日期时引发异常。

于 2014-03-10T17:55:22.980 回答