如何处理在Spring MVC的控制器不同的日期格式?(How to handle differen

2019-07-30 06:17发布

是否有可能在Spring MVC控制器来处理不同的日期格式?

我知道,设定这样的事情

@InitBinder
protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
            dateFormat, false));
}

我可以处理dd/MM/yyyy格式,但如果我要分析什么也日期在yyyyMMddhhmmss格式? 我要补充的多CustomDateEditor在我的控制?

Answer 1:

如果在同一时间收到日期只有一种格式,那么你可以简单地创建的一个实例DateFormat基于格式

例如

决定根据输入的格式

DateFormat df = null;
if(recievedDate.indexOf("//")!=-1){
    df = new SimpleDateFormat("dd/MM/yyyy")
}else{
    df = new SimpleDateFormat("yyyyMMddhhmmss")
}


Answer 2:

如果你只在puntual情况下需要它,你可以注册附着在形成场的自定义编辑器:

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", this.getLocale(context));
DateFormat dateTimeFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss SSS", this.getLocale(context));
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateTimeFormat, true));
binder.registerCustomEditor(Date.class, "name.of.input", new CustomDateEditor(dateTimeFormat, true));


Answer 3:

通过Skipy启发

public class LenientDateParser extends PropertyEditorSupport {

private static final List<String> formats = new ArrayList<String>();

private String outputFormat;

static{
    formats.add("dd-MM-yyyy HH:ss");
    formats.add("dd/MM/yyyy HH:ss");
    formats.add("dd-MM-yyyy");
    formats.add("dd/MM/yyyy");
    formats.add("dd MMM yyyy");
    formats.add("MMM-yyyy HH:ss");
    formats.add("MMM-yyyy");
    formats.add("MMM yyyy");
}

public LenientDateParser(String outputFormat){
    this.outputFormat = outputFormat;
}

@Override
public void setAsText(String text) throws IllegalArgumentException {
    if(StringUtils.isEmpty(text))
        return;
    DateTime dt = null;
    for(String format : formats){

        try{

            dt = DateTime.parse(text, DateTimeFormat.forPattern(format));

            break;

        }catch(Exception e){
            if(log.isDebugEnabled())
                log.debug(e,e);
        }
    }
    if(dt != null)
        setValue(dt.toDate());
}

@Override
public String getAsText() {
    Date date = (Date) getValue();

    if(date == null)
        return "";

    DateTimeFormatter f = DateTimeFormat.forPattern(outputFormat);

    return f.print(date.getTime());

}
}


Answer 4:

这个怎么样。 上面可以很快走出失衡。

       public class MostLenientDateParser {
           private final List<String> supportedFormats;

           public MostLenientDateParser(List<String> supportedFormats) {
               this.supportedFormats = supportedFormats;
           }

           public Date parse(String dateValue) {
               for(String candidateFormat: supportedFormats) {
                   Date date = lenientParse(dateValue, candidateFormat);
                   if (date != null) {
                       return date;
                   }
               }
               throw new RuntimeException("tried so many formats, non matched");
           }

           private Date lenientParse(String dateCandidate, String dateFormat) {
               try {
                   return new SimpleDateFormat(dateFormat).parse(dateCandidate);
               } catch (Exception e) {
                   return null;
               }
           }
       }

这也可以通过弹簧转换器通过表单数据绑定和CustomDateEditor实现引用。



Answer 5:

对于有同样的问题别人,如果你使用的春天3你可以使用你的模型领域的真棒@DateTimeFormat(模式=“DD-MM-YYYY”)。

只要确保你的org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注册一个conversionService

你可以有,只要你想在同一个bean @DateTimeFormat之多。



Answer 6:

不是一个伟大的想法,与多个地区打交道时,有宽大日期格式化。 像2013年10月11日一个日期将得到既DD / MM / YYYY和MM / DD / YYYY正确解析



文章来源: How to handle different date formats in Spring MVC controller?