content: package com.java2nb.novel.core.converter;
  
  import org.springframework.core.convert.converter.Converter;
  
  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.List;
  
  /**
   * 表单形式的全局时间类型转换器
   * @author xiongxiaoyang
   */
  public class DateConverter implements Converter<String, Date> {
  
      private static final List<String> formats = new ArrayList<>(4);
  
      static {
          formats.add("yyyy-MM");
          formats.add("yyyy-MM-dd");
          formats.add("yyyy-MM-dd HH:mm");
          formats.add("yyyy-MM-dd HH:mm:ss");
      }
  
      @Override
      public Date convert(String source) {
          String value = source.trim();
          if ("".equals(value)) {
              return null;
          }
          if (source.matches("^\\d{4}-\\d{1,2}$")) {
              return parseDate(source, formats.get(0));
          } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
              return parseDate(source, formats.get(1));
          } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
              return parseDate(source, formats.get(2));
          } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
              return parseDate(source, formats.get(3));
          } else {
              throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
          }
      }
  
      /**
       * 格式化日期
       *
       * @param dateStr String 字符型日期
       * @param format  String 格式
       * @return Date 日期
       */
      private Date parseDate(String dateStr, String format) {
          Date date = null;
          try {
              DateFormat dateFormat = new SimpleDateFormat(format);
              date = dateFormat.parse(dateStr);
          } catch (Exception e) {
              e.printStackTrace();
          }
          return date;
      }
  }
  