如何使android应用程序在各自时区的午夜准确访问文件
我有一个配置为时区IST的服务器,它是GMT+5:30,每天都会使用Cron作业生成新的JSON文件。生成的文件名为1551139200000.json ie.GMT:2019年2月26日星期二上午12:00:00 如何使此文件仅在上午12:00/之后可供android应用程序使用。目前,它可以适用于所有上午12:00未被击中的时区。在这种情况下,它应该访问前一天的Json文件如何使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
// 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
- ,解释得非常透彻
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);