gpt4 book ai didi

java - 如何在 Java 中解析 DialogFlow 日期 (@sys.time-period)

转载 作者:行者123 更新时间:2023-12-02 01:11:03 28 4
gpt4 key购买 nike

我在用 Java 解析 DialogFlow 日期时遇到问题。DialogFlow 允许我们使用单词来描述日期期间实体,例如“平安夜”、“下午”、“下周”等。(请参阅 https://cloud.google.com/dialogflow/docs/reference/system-entities )

但是,当我使用“平安夜”等术语时,Dialogflow v2 返回以下对象:{“startDate”:“2019-12-25T12:00:00-05:00”,“endDate”:“2019-12-18T12:00:00-05:00”}。

为什么 DialogFlow 返回“平安夜”的那个时间段?

这样,使用 LocalDateTime 解析没有偏移量的日期的最佳方法是什么?例如,给定“2019-12-25T12:00:00-05:00”,我希望时间保持为“12:00:00”

我尝试使用以下代码:

DateTimeFormatter isoDateFormatter = DateTimeFormatter.ISO_DATE_TIME;
LocalDateTime date = LocalDateTime.parse(dateStr, isoDateFormatter);
Date myDate = Date.from(date.atZone(ZoneId.of("UTC")).toInstant());

但是,新日期已调整为返回“Wed Dec 25 07:00:00 EST 2019”如何修复此问题以删除偏移量而不指定特定时区?

最佳答案

你已经在那里了

您对 LocalDateTime 的解析是正确的。 LocalDateTime 就是这样:没有时区的日期和时间。这不就是你想要的吗?然后保留它并忘记有关 Date 类的所有内容。无论如何,它的设计很糟糕而且已经过时了。

如果您需要老式的 java.util.Date 来实现旧版 API

有时,我们确实需要一个尚未升级到 java.time(现代 Java 日期和时间 API)的遗留 API 的 Date。不幸的是,Date 并不是没有时区的日期和时间。相反,它是一个时间点(但没有时区也可以)。我们只能假装。我们确实需要指定转换的时区或偏移量。

    Instant myInstant = date.atZone(ZoneId.systemDefault()).toInstant();
Date myDate = Date.from(myInstant);
System.out.println(myDate);

示例输出:

Wed Dec 25 12:00:00 EST 2019

date 是问题代码中的 LocalDateTime

我正在利用这样一个事实:Date 获取 JVM 的默认时区,并使用它来渲染从 toString() 返回的字符串,该字符串在以下情况下隐式调用:我们打印日期。许多人发现这种行为非常令人困惑。但虽然你没有得到你想要的结果,但至少看起来你得到了。除了仍打印时区缩写。

关于java - 如何在 Java 中解析 DialogFlow 日期 (@sys.time-period),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397355/

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