gpt4 book ai didi

java - java8中如何在LocalDateTime、ZonedDateTime等类中选择Date/Time类?

转载 作者:行者123 更新时间:2023-12-02 10:33:53 25 4
gpt4 key购买 nike

我想像下面这样转换 Java8 之前的版本。

DateFormat formatter = new SimpleDateFormat(timestampPattern, locale);
Date dt = formatter.parse(timestamp);
Date currentDateTime = getCurrentTime();

Java 8 代码支持超过 3 位数字(以毫秒为单位)。我找到了使用以下简单代码来做到这一点的方法。

String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS");
LocalDateTime newdate = LocalDateTime.parse(parsedate, dateTimeFormatter);

上述代码的问题是,在解析它之前,您必须知道特定的类,例如,如果它仅包含日期,则必须使用 LocalDate,如果仅包含时间 LocalTime,如果日期 + 时间 + 区域,则必须使用 ZonedDateTime。

我的问题是我事先不知道 timestampPattern 或时间戳(在 Java8 之前的代码片段中给出)(因为它是用户输入),因此无法在我的代码中选择子类。有没有更好的办法?

最佳答案

以下代码将向您展示如何处理它:

String parsedate="2016-03-16 01:14:21.6739";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSS");
TemporalAccessor parsed = dateTimeFormatter.parse(parsedate);
System.out.println(parsed.getClass());
// with the Parsed object you can then construct what you require... e.g. LocalDate:
System.out.println(LocalDate.from(parsed));
// or LocalDateTime:
System.out.println(LocalDateTime.from(parsed));

打印:

class java.time.format.Parsed
2016-03-16
2016-03-16T01:14:21.673900

因此,您只需在代码中使用所需的内容,并从 Parsed 对象构建您的 LocalDateLocalDateTime 即可。

请注意,如果用户只能输入 yyyy-MM-dd 并且您使用了这样的日期时间格式,那么您在创建 LocalDateTime 时将会遇到问题从中,但我认为您通常知道您需要哪种目标类型。否则,您甚至可以直接使用 TemporalAccessor

为了解决特定的日期类型问题,您可能需要处理异常(尝试解析它(或从 Parsed 对象调用 from)并回退到下一个可能的日期格式或类型)或者只是事先检查格式并使用适当的日期格式化程序并然后输入,这是我推荐的。

关于java - java8中如何在LocalDateTime、ZonedDateTime等类中选择Date/Time类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com