我有一个配置为时区IST的服务器,格林威治标准时间+5:30,并且每天使用Cron作业生成新的JSON文件。生成的文件名为1551139200000.json ie.GMT:2019年2月26日星期二12:00:00 AM。
如何在12:00 AM之前/之后将此文件提供给Android应用程序。目前它可以在所有时区使用,而这些时区没有在12:00 AM开始。在这种情况下,它应该访问前一天的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:这个逻辑可以在着名的填字游戏中使用,例如Puzzle Bonza。在那个游戏中,新的谜题将在每天开始时访问,即上午12:00。
// 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.time,现代Java日期和时间API,为您提供所需的非常好的设施。
是的,java.time适用于较旧和较新的Android设备。它至少需要Java 6。
org.threeten.bp
导入子包的日期和时间类。java.time
首次被描述。java.time
的后端到Java 6和7(JST-310的ThreeTen)。