7

我想要几毫秒到接下来的几个小时。例如

现在时间 -> 2018 年 10 月 2 日 10:01:23,希望剩余毫秒到 2018 年 10 月 2 日 11:00:00。

现在时间是动态的,可以是 2018 年 10 月 2 日 23:56:56,下一小时是 2018 年 10 月 3 日 00:00:00。

Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(startDate.getMillis());
    calendar.add(Calendar.HOUR, 1);

我正在尝试这样的事情,但它增加了 1 小时的 startDate。但我想要准确的下一小时。

欢迎任何帮助。

4

4 回答 4

13

从 Java8 开始,您可以使用java.time.LocalDateTime

    LocalDateTime start = LocalDateTime.now();
    // Hour + 1, set Minute and Second to 00
    LocalDateTime end = start.plusHours(1).truncatedTo(ChronoUnit.HOURS);

    // Get Duration
    Duration duration = Duration.between(start, end);
    long millis = duration.toMillis();

刚刚运行(2018-10-02T18:44:48.943070 北京时间)我得到了 911 056 毫秒。

于 2018-10-02T04:45:17.827 回答
2

一个简单的算术方法:

long hourInMillis = 60 * 60 * 1000;
long startDateInMillis = startDate.getMillis();
long millisSinceLastHourChange = startDateInMillis % hourInMillis;
long millisToNextHourChange = hourInMillis - millisSinceLastHourChange;

从 Java 1 开始工作;-)

编辑
这种方法不考虑 DST 或类似的变化。

于 2018-10-02T07:48:06.657 回答
0
于 2018-10-14T23:44:21.947 回答
0

使用的java.time解决方案ZonedDateTime.until

ZonedDateTime startDate = ZonedDateTime.now();
LocalDateTime nextHour = startDate.plusHours(1).truncatedTo(ChronoUnit.HOURS);
long msUntillNextHour = startDate.until(nextHour, ChronoUnit.MILLIS);
于 2018-10-15T21:08:14.160 回答