Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使android应用程序在各自时区的午夜准确访问文件_Android_Timezone_Utc_Current Time - Fatal编程技术网

如何使android应用程序在各自时区的午夜准确访问文件

如何使android应用程序在各自时区的午夜准确访问文件,android,timezone,utc,current-time,Android,Timezone,Utc,Current Time,我有一个配置为时区IST的服务器,它是GMT+5:30,每天都会使用Cron作业生成新的JSON文件。生成的文件名为1551139200000.json ie.GMT:2019年2月26日星期二上午12:00:00 如何使此文件仅在上午12:00/之后可供android应用程序使用。目前,它可以适用于所有上午12:00未被击中的时区。在这种情况下,它应该访问前一天的Json文件 // normal code here. long fullMsecs = System.currentTimeMil

我有一个配置为时区IST的服务器,它是GMT+5:30,每天都会使用Cron作业生成新的JSON文件。生成的文件名为1551139200000.json ie.GMT:2019年2月26日星期二上午12:00:00

如何使此文件仅在上午12:00/之后可供android应用程序使用。目前,它可以适用于所有上午12:00未被击中的时区。在这种情况下,它应该访问前一天的Json文件

// normal code here.
long fullMsecs = System.currentTimeMillis();
long ist_offset = 330*60*1000;

long filename = (fullMsecs + ist_offset)/86400_000 * 86400_000;
Log.d(TAG, "onCreate:filename" + filename);

// filename would be affixed with required file extension.
PS:这种逻辑在著名的填字游戏如拼图邦扎中可用。在该游戏中,新的谜题将在一天的开始即12:00上午访问

java.time和ThreeTenABP 刚才运行时的输出是您所期望的:

文件名:1551139200000.json

不要像你的问题中那样手工计算日期和时间。它比你想象的要难,容易出错,而且很难阅读和维护。现代java日期和时间API java.time为您提供了非常好的工具

问题:我可以将java.time与Android Minsdk版本19一起使用吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

因此,如果用户希望尽早获得新文件,他们可以将设备时区设置为Pacific/Kiritimati(即GMT+14:00)?你能发现这样的欺骗行为吗?不一定。只是为了避免在设备时间尚未达到午夜时自动访问文件。我的应用程序的构建配置类似于
compileSdkVersion 26
minSdkVersion 19
targetSdkVersion 26
。所以我不能在api 19中使用ZoneId。但您的代码是完美的,我通过更改api级别进行了测试,并将在将来使用。非常感谢。谢谢,基兰金。我将标题改为问题:我可以将java.time与Android MinsdkVersion19一起使用吗?为了更清楚地说明,我已经在回答中尝试解决了这个问题。:-)
    // 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);