当前位置: 首页 > 知识库问答 >
问题:

字符串格式通过Java的简单日期格式而不是JodaTime的日期时间格式可以正常工作

柯清野
2023-03-14

我正在使用Hibernate验证器。

我有一个java.util.Date的对象,它是通过反射如何检索字符串由于以下:

Object dateDeathObject = BeanUtils.getProperty(value, "dateDeath");
logger.info("dateDeathObject: {}", dateDeathObject);

输出始终具有以下格式:

- dateDeathObject: Mon Sep 01 16:01:42 PET 2014

使用简单日期格式API

模式是< code > EEE MMM DD hh:mm:ss zzz yyyy

因此,通过字符串中的JDK 8(表示某个日期值的Date.toString(),我可以再次获得原始的日期表示对象,以便稍后执行一些验证

SimpleDateFormat sdf =  new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy");
Date date = sdf.parse((String) dateDeathObject);
logger.info("date: {}", date);

而且效果很好

我可以在输出中看到以下内容:

  • dateDeathObject: Mon Sep 01 16:01:42 PET 2014
  • 日期: Mon Sep 01 16:01:42 PET 2014

问题在于乔达时间,如何使用java.util.Date的替代方案。

DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd hh:mm:ss zzz yyyy");
DateTime dt = formatter.parseDateTime( (String) dateDeathObject );
logger.info("dt: {}", dt);

观察相同的EEE MMM dd hh:mm:ss zzz yyyy模式,但我得到了以下错误:

javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
...
Caused by: java.lang.IllegalArgumentException: Invalid format: "Mon Sep 01 16:01:42 PET 2014" is malformed at "PET 2014"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:873)
    at com.manuel.jordan.validation.support.DateDeathValidator.isValid(DateDeathValidator.java:67)
    at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:283)
    ... 38 more

我对< code >在“PET 2014”中的格式不正确感到困惑。JodaTime缺少什么?

共有1个答案

孙泉
2023-03-14

PET未列在joda时间支持的时区列表中。您可以尝试更新数据库。希望这能有所帮助,如果您仍有问题,请留下评论。

 类似资料:
  • 问题内容: 如果我有一个日期,而我想要的只是这样的月份和日期(mm / dd),然后把这个月份变成08年7月,您将如何写日期 问题答案: 让我看看我是否理解得很好。 您有“ 07/08”之类的日期,并且想要“ 08年7月”? 您可以尝试SimpleDateFormat

  • 我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新

  • 我有一个格式化的字符串日期 2020/04/16 (年/月/日) 我想把这个字符串解析成日期时间 显然不起作用,没有正确的日期格式。 有人知道把这个字符串解析成日期时间的最好方法是什么吗?

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y