计算距特定时区的午夜为止的秒数

时间:2018-09-29 00:26:54

标签: android date time calendar

我正在尝试编写一个代码,计算在特定时区到午夜还有几秒钟的时间。

我定位的时区是EDT,即“ GMT-04:00”。

我发现许多主题涉及时间计算,但是没有一个主题帮助我弄清楚计算特定时区中午夜十二点的技巧。

有人能指出我正确的方向吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我相信这是您要寻找的逻辑? (不要只问第一个答案,而是指日历,语言环境和时区)

https://stackoverflow.com/a/39757060/1552960

使用日历和时区来计算确切时间,然后只需使用该日历对象来查找午夜另一个设置的日历对象之间的时差:)

长期差异InMillis = midnightCalendarObject.getTimeInMillis()-calendarObject.getTimeInMillis();

long secondsUntilMidnight = TimeUnit.toSeconds(differenceInMillis);

答案 1 :(得分:0)

java.time

    ZoneId zone = ZoneId.of("America/New_York");
    ZonedDateTime now = ZonedDateTime.now(zone);
    ZonedDateTime midnight = now.toLocalDate().plusDays(1).atStartOfDay(zone);
    long secondsLeftTillMidnight = Duration.between(now, midnight).getSeconds();
    System.out.println("Seconds till midnight: " + secondsLeftTillMidnight
            + ". Time now: " + now + '.');

现在输出:

  

秒至午夜:34801。现在时间:2018-10-01T14:19:58.651572-04:00 [America / New_York]。

问题:我可以在Android上使用java.time吗?

是的,java.time在Android设备上运行良好。它只需要至少 Java 6

  • 在Java 8和更高版本以及新的Android设备上(有人告诉我API级别为26),新的API是内置的。
  • 在Java 6和7中,获得了ThreeTen反向端口,即新类的反向端口(JSR 310的ThreeTen,首次描述了现代API)。
  • 在(较旧的)Android上,使用ThreeTen Backport的Android版本。叫做ThreeTenABP。确保从包org.threeten.bp和子包中导入日期和时间类。

链接