【问题标题】:Calculating seconds left till midnight of a specific time zone [duplicate]计算特定时区午夜前的秒数[重复]
【发布时间】:2018-09-29 00:26:53
【问题描述】:

我正在尝试编写一个代码来计算在特定时区中距离午夜还有多少秒。

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

我发现许多主题都涉及时间计算,但没有一个能帮助我找出计算特定时区距离午夜的秒数的技巧。

谁能指出我正确的方向?

谢谢。

【问题讨论】:

  • 在发布之前始终彻底搜索 Stack Overflow。

标签: android date time calendar


【解决方案1】:

我相信这就是您要寻找的逻辑? (不看问题,只看第一个答案,指Calendar、Locales和TimeZones)

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

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

long differenceInMillis =midnightCalendarObject.getTimeInMillis() - calendarObject.getTimeInMillis();

long secondsUntilMidnight = TimeUnit.toSeconds(differenceInMillis);

【讨论】:

    【解决方案2】:

    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 Backport,即新类的后向端口(JSR 310 的 ThreeTen,现代 API 首次被描述的地方)。
    • 在(较旧的)Android 上,使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。确保从包 org.threeten.bp 和子包中导入日期和时间类。

    链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多