1

我的消费者收到的时间格式是String20/5/14_9:22:2520/5/14_9:22:520/5/14_12:22:2520/10/14_9:2:25等...

以上所有内容都具有非常不同的日期时间模式,yy/MM/dd_HH:mm:ss 并且可能有许多具有单个数字日、月、小时、分钟和/或秒的可能性。

是否有一个我可以使用的主模式,DateTimeFormatter.ofPattern(format)它适用于上述所有模式?

4

2 回答 2

1

图案看起来一样

      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy/M/dd_H:mm:s");
      LocalDate parsedDate = LocalDate.parse("20/5/14_9:22:25", formatter);
      System.out.println(parsedDate);
      parsedDate = LocalDate.parse("20/5/14_9:22:5", formatter);
      System.out.println(parsedDate);
      parsedDate = LocalDate.parse("20/10/14_9:22:25", formatter);
      System.out.println(parsedDate);  

输出

2020-05-14
2020-05-14
2020-10-14

与直觉相反但非常实用的是,对于数字,一个模式字母,例如Mor H,并不意味着一个数字,而是“尽可能多的数字”。所以M解析510(甚至05)。H解析912等。相比之下,两个模式字母,例如MMor HH,正好表示两位数,因此对于解析 5 个月和 9 小时都不起作用。它需要05or 09。或者正如文档所说:

数字:如果字母数为 1,则使用最小位数输出值且不进行填充。否则,位数将用作输出字段的宽度,必要时将值补零。…</p>

因此,如果您需要接受一位数的月份日期或一位数的小时分钟,也请分别使用一个模式字母dm

但是有一个小时29(就像你在问题的早期版本中所做的那样)是错误的。

文档链接: DateTimeFormatter

于 2020-05-14T08:00:17.980 回答
1

可怕袋熊的答案是中肯的。我添加这个答案只是为了让你知道,除了LocalDate包之外,java.time还有一个LocalDateTime你可以用来处理日期和时间的包,如下所示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy/M/dd_H:mm:s");
        LocalDateTime ldt = LocalDateTime.parse("20/5/14_9:22:25", formatter);
        System.out.println(ldt);
        ldt = LocalDateTime.parse("20/5/14_9:22:5", formatter);
        System.out.println(ldt);
        ldt = LocalDateTime.parse("20/10/14_9:22:25", formatter);
        System.out.println(ldt);
    }
}

输出:

2020-05-14T09:22:25
2020-05-14T09:22:05
2020-10-14T09:22:25
于 2020-05-14T08:17:50.740 回答