柯桥增值式服务
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

78 lignes
2.7KB

  1. package com.ningdatech.kqapi.common.converter;
  2. import com.ningdatech.kqapi.common.exception.BizException;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.core.convert.converter.Converter;
  5. import org.springframework.lang.NonNull;
  6. import org.springframework.lang.Nullable;
  7. import java.text.DateFormat;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11. import java.util.LinkedHashMap;
  12. import java.util.Map;
  13. import static com.ningdatech.kqapi.common.exception.BaseException.BASE_VALID_PARAM;
  14. import static com.ningdatech.kqapi.common.util.NdDateUtils.*;
  15. /**
  16. * 解决入参为 Date类型
  17. *
  18. * @author WendyYang
  19. * @date 2019-04-30
  20. */
  21. @Slf4j
  22. public class String2DateConverter extends BaseDateConverter<Date> implements Converter<String, Date> {
  23. protected static final Map<String, String> FORMAT = new LinkedHashMap<>(15);
  24. static {
  25. FORMAT.put(DEFAULT_YEAR_FORMAT, "^\\d{4}");
  26. FORMAT.put(DEFAULT_MONTH_FORMAT, "^\\d{4}-\\d{1,2}$");
  27. FORMAT.put(DEFAULT_DATE_FORMAT, DEFAULT_DATE_FORMAT_MATCHES);
  28. FORMAT.put("yyyy-MM-dd HH", "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}");
  29. FORMAT.put("yyyy-MM-dd HH:mm", "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$");
  30. FORMAT.put(DEFAULT_DATE_TIME_FORMAT, DEFAULT_DATE_TIME_FORMAT_MATCHES);
  31. FORMAT.put(DEFAULT_MONTH_FORMAT_SLASH, "^\\d{4}/\\d{1,2}$");
  32. FORMAT.put(SLASH_DATE_FORMAT, SLASH_DATE_FORMAT_MATCHES);
  33. FORMAT.put("yyyy/MM/dd HH", "^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}");
  34. FORMAT.put("yyyy/MM/dd HH:mm", "^\\d{4}/\\d{1,2}/\\d{1,2} {1}\\d{1,2}:\\d{1,2}$");
  35. FORMAT.put(SLASH_DATE_TIME_FORMAT, SLASH_DATE_TIME_FORMAT_MATCHES);
  36. FORMAT.put(DEFAULT_DATE_FORMAT_EN, DEFAULT_DATE_FORMAT_EN_MATCHES);
  37. FORMAT.put(DEFAULT_DATE_TIME_FORMAT_EN, DEFAULT_DATE_TIME_FORMAT_EN_MATCHES);
  38. }
  39. /**
  40. * 格式化日期
  41. *
  42. * @param dateStr String 字符型日期
  43. * @param format String 格式
  44. * @return Date 日期
  45. */
  46. protected static Date parseDate(String dateStr, String format) {
  47. try {
  48. DateFormat dateFormat = new SimpleDateFormat(format);
  49. //严格模式
  50. dateFormat.setLenient(false);
  51. return dateFormat.parse(dateStr);
  52. } catch (ParseException e) {
  53. log.info("转换日期失败, date={}, format={}", dateStr, format, e);
  54. throw new BizException(BASE_VALID_PARAM, e.getMessage(), e);
  55. }
  56. }
  57. @Override
  58. protected Map<String, String> getFormat() {
  59. return FORMAT;
  60. }
  61. @Override
  62. @Nullable
  63. public Date convert(@NonNull String source) {
  64. return super.convert(source, key -> parseDate(source, key));
  65. }
  66. }