gpt4 book ai didi

java - 如何在下午 4 点和凌晨 2 点之间的两个时间生成随机时间?

转载 作者:行者123 更新时间:2023-12-03 13:52:30 25 4
gpt4 key购买 nike

我试过使用 -

int startSeconds = restaurant.openingTime.toSecondOfDay();
int endSeconds = restaurant.closingTime.toSecondOfDay();
LocalTime timeBetweenOpenClose = LocalTime.ofSecondOfDay(ThreadLocalRandom.current().nextInt(startSeconds, endSeconds));
但这通常会遇到错误,如 nextInt(origin, bounds), origin 不能小于 bounds,如果我的 openingTime 会发生这种情况。是 16:00:00 和 closingTime是 02:00:00。

最佳答案

如果不应用日期和时区,我们无法知道从下午 4 点到凌晨 2 点之间将经过多长时间。因此,我们将使用 ZonedDateTime 解决它.

  • 第一步是:获取 ZonedDateTime调用 LocalDate#atStartOfDay
  • ZoneId zoneId = ZoneId.systemDefault();
    LocalDate.now().atStartOfDay(zoneId);
  • 接下来,使用 ZonedDateTime#with 获得 ZonedDateTime与指定的时间。
  • 现在,您可以导出 Instant来自 ZonedDateTime使用 ZonedDateTime#toInstant .
  • 一旦你有了开始和结束 Instant s 以这种方式导出,您可以使用 ThreadLocalRandom.current().nextLong 生成 long开始和结束范围内的值 Instant s 并使用获得的值来获取所需的 Instant .
  • 最后,您可以导出 ZonedDateTime从这里 Instant使用 Instant#atZone 然后使用 ZonedDateTime#toLocalTime 获得所需的时间.

  • 演示:
    import java.time.Instant;
    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.util.concurrent.ThreadLocalRandom;

    public class Main {
    public static void main(String[] args) {
    // Change it as per the applicable timezone e.g. ZoneId.of("Europe/London")
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDate today = LocalDate.now();

    ZonedDateTime zdtStart = today.atStartOfDay(zoneId)
    .with(LocalTime.of(16, 0));

    ZonedDateTime zdtEnd = today.plusDays(1)
    .atStartOfDay(zoneId)
    .with(LocalTime.of(2, 0));

    ZonedDateTime zdtResult =
    Instant.ofEpochMilli(
    ThreadLocalRandom
    .current()
    .nextLong(
    zdtStart.toInstant().toEpochMilli(),
    zdtEnd.toInstant().toEpochMilli()
    )
    ).atZone(zoneId);

    LocalTime time = zdtResult.toLocalTime();
    System.out.println(time);
    }
    }
    了解有关现代日期时间 API 的更多信息Trail: Date Time .
    ONLINE DEMO随机打印 100 次。

    关于java - 如何在下午 4 点和凌晨 2 点之间的两个时间生成随机时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66930248/

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