如何使文件在相应时区的午夜准确到Android应用

时间:2019-02-26 08:16:23

标签: android timezone utc current-time

我有一个配置为时区IST(格林尼治标准时间+5:30)的服务器,每天都会使用Cron作业生成新的JSON文件。生成的文件名将为1551139200000.json,即GMT:2019年2月26日,星期二,12:00:00 AM。

如何仅在12:00 AM或之后将此文件提供给android应用。目前,该时间可能适用于未在12:00 AM的所有时区。在这种情况下,它应该访问前一天的Json文件。

except

PS:这种逻辑适用于诸如益智游戏Bonza之类的著名填字游戏。在该游戏中,新拼图将在当天的凌晨12:00访问。

1 个答案:

答案 0 :(得分:2)

java.time和ThreeTenABP

    // Today in user’s time zone
    LocalDate today = LocalDate.now(ZoneId.systemDefault());

    // Today’s file name is epoch millis for 12 AM GMT
    long startOfDayGmt = today.atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
    String fileName = String.valueOf(startOfDayGmt) + ".json";

    System.out.println("File name: " + fileName);

刚运行时的输出是您期望的:

  

文件名:1551139200000.json

请不要像问题中那样手动计算日期和时间。它比您想象的要难,容易出错,并且难以阅读和维护。现代的Java日期和时间API java.time提供了非常好的功能,可以满足您的需求。

问题:我可以在Android minSdkVersion 19中使用java.time吗?

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接