【问题标题】:How to parse a datetime string without a year in Joda Time?如何在 Joda Time 中解析没有年份的日期时间字符串?
【发布时间】:2015-03-20 21:12:22
【问题描述】:

我需要将字符串转换为 Joda Time DateTime 值。字符串表示包含日、月、小时和分钟,但没有年。

我该怎么做?

我尝试了类似DateTimeFormat.forPattern("dd.MM HH:mm").parseDateTime("26.03 02:50") 的方法,但出现以下异常:

org.joda.time.IllegalInstantException: Cannot parse "26.03 02:50": Illegal instant due to time zone offset transition (Europe/Moscow)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:471)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:440)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:411)
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:882)

【问题讨论】:

  • DateTime 应该包含日期,并且任何日期都包含year。没有年份就不可能有抽象日期。所以,我认为答案是:没有办法。
  • @Andremoniy 总有一种解决方法。我很确定我不是第一个必须处理无年份日期表示的人。
  • 你的意思是应该用当年的吗?
  • @SergeyPauk 我需要一个有或没有年份的DateTime 对象。在下一步中,我确定年份并将设置该对象的年份(已经有一个例程,可以计算正确的年份)。
  • 为什么不提前解决年份并将其添加到日期字符串中?

标签: java jodatime


【解决方案1】:

你已经接近它了...例如使用 parseLocalDateTime 函数:

DateTimeFormat.forPattern("dd.MM HH:mm").parseLocalDateTime("26.03 02:50");

但请注意,此解决方案会忽略任何可能给定的时区信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2012-08-22
    • 2014-08-20
    • 1970-01-01
    • 2014-04-08
    • 2023-02-03
    相关资源
    最近更新 更多