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

在ZoneDateTime时区中开始一天

杜俊晤
2023-03-14

给定ZonedDateTime,我如何获得时区所在的一天开始的ZonedDateTime?我不希望一天的开始是UTC。

实例

给定ZoneDateTime。of(2022,6,8,1,0,0,0,ZoneId.of(“美国/纽约”))

我想返回ZonedDateTime.of(2022, 6, 7, 0, 0, 0, 0, ZoneId.of("America/New_York"))

因为UTC的6月8日凌晨1点是东部时间的6月7日晚上9点,我想要输入时间所在的当天的上午12点

反例

给定ZoneDateTime。of(2022,6,8,6,0,0,0,ZoneId.of(“美国/纽约”))

我想在DateTime返回。of(2022,6,8,0,0,0,0,ZoneId.of(“美国/纽约”))

因为UTC的6月8日早上6点是东部时间的6月8日早上2点,我想要输入时间所在的那天上午12点。纽约目前正在实行夏令时。

共有1个答案

羊舌炯
2023-03-14

分区日期时间

ZonedDateTime.of(2022, 6, 8, 1, 0, 0, 0, ZoneId.of("America/New_York"))

表示纽约时区中的日期时间2022-06-08T01:00:00,而不是UTC,而您似乎将其视为两个单独的值-UTC中的日期时间2022-06-08T01:00:00和纽约时区。我认为使用两个单独的参数更有意义,例如:

public static ZonedDateTime startOfDayAtZone(Instant instant, ZoneId zone) {
    return instant.atZone(zone).truncatedTo(ChronoUnit.DAYS);
}

public static ZonedDateTime startOfDayAtZone(LocalDateTime dateTime, ZoneId zone) {
    return dateTime.toInstant(ZoneOffset.UTC).atZone(zone).truncatedTo(ChronoUnit.DAYS);
}

如果您真的想使用一个ZonedDateTime对象来表示两个独立的事物:

public static ZonedDateTime startOfDayAtZone(ZonedDateTime zdt) {
    return zdt.toLocalDateTime().toInstant(ZoneOffset.UTC).atZone(zdt.getZone()).truncatedTo(ChronoUnit.DAYS);
}
 类似资料:
  • 我很难理解ZoneDateTime-Instant-LocalDateTime之间的java.time,到目前为止,我唯一知道的是: Instant在两者之间工作 Instant(在我的理解中),是时间时刻(UTC)的时间印记,与人类时间流动相关的时间印记,但没有时区 区域日期时间有时区 Instant没有时区,但可以在提供了时区信息的情况下处理它 LocalDate时间没有时区,不能处理区域,它

  • 我的日期格式为:YYYY-MM-DD 所需的输出格式是:"yyyy-MM-dd'T'HH: mm: ss.SSS'Z'" 我想在美国/芝加哥时区获得ISO格式的日期,作为一天的开始时间(从上午12:00开始)和一天的结束时间(结束于晚上11:59)。 对于eg.日期: 2020-06-08(6月8日)转换后的最终输出如下: 当天开始时间为日期: 2020-06-08T05:00:00.000Z 截

  • 我有一行代码: 当我这次尝试输出时,它返回: 然后我尝试格式化这个日期时间: 这让我想起: 这是错误的。这就像是在我的时区中减去6个小时,而不是加上它。为什么会这样?

  • Photoshop、Illustrator 和 InDesign 提供“开始”工作区,通过该工作区,您可以快速访问最近打开的文件和在 Creative Cloud 中存储的文件。在此工作区中,您还可以访问可满足您需求的各种资源。您还可以从此工作区内搜索 Adobe Stock 资源。在 Photoshop 中,您甚至可以在“开始”工作区中处理 Lightroom 照片。 “开始”工作区 您将在下列

  • 我正在尝试使用下面的ZonedDateTime对象行解析格式为“yyyy-MM-dd'T'HH:MM:ssZ”的ISO8601时间字符串: 然而,我得到以下错误时,这样做: 我无法想象这是不允许的,因为符号是解析的有效字符。有人能帮忙解决这里的问题吗?

  • 我计划根据以下逻辑将ZonedDateTime转换为即时。 比如说,我在太平洋标准时间时区,当前时间是11A。M、 如果我现在转换(截至今天2018年3月4日没有夏令时),toInstant将为7P。M 由于实行夏时制,toInstant将于2018年4月4日上午11点返回。 因此,下面的代码正确返回。 但是, 如果我转换为Instant,然后添加一个月,结果会有所不同。 这是确定的,因为我们已经