我有一台配置为GMT 5:30的服务器,并使用Cron作业生成日常新JSON文件。生成的文件名为1551139200000.JSON IE.GMT:2019年2月26日,星期二12:00:00 AM。
仅在上午12:00之后,如何使此文件可用于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。在那场比赛中,新的难题将在开始的初期IE(上午12:00)访问。
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.Time,现代Java日期和时间API,为您需要的设施提供了非常好的设施。
问题:我可以将Java.Time与Android Minsdkversion 19?
一起使用是的,java.Time在较旧的和较新的Android设备上都可以很好地工作。它至少需要 Java 6 。
- 在Java 8及以后以及在新的Android设备上(来自API级别26),现代API是内置的。
- 在Java 6和7中获得了三分之一的回向运动,这是现代阶级的后座(JSR 310的Threeten;请参阅底部的链接)。
- 在(较旧的)Android上使用Threeten Backport的Android版本。它叫做三分之一。并确保您从
org.threeten.bp
导入带有子包的日期和时间类。
链接
- Oracle教程:解释如何使用Java.Time的日期时间。
- Java规范请求(JSR)310,首先描述了
java.time
。 - Threeten Backport Project,
java.time
的Backport到Java 6和7(JSR-310的Threeten)。 - Threetenabp,Threeten Backport的Android Edition
- 问题:如何在Android项目中使用Threetenabp,并具有非常详尽的解释。