System.out.println(json.toString());
System.out.println(json.get("date"));
返回历元时间中的时间,例如:1609642292
> Task :Program:DateUtils.main()
{"date":1609642292}
1609642292
这就是我用来从api中提取日期的方法
import java.io.InputStreamReader;
import java.net.URL;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
public class DateUtils
{
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
// InputStream is = new URL(url).openStream();
try (var is = new URL(url).openStream()) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
}
}
public static void main(String[] args) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://Time.xyz/api/date"); //Don't want to post real API
System.out.println(json.toString());
System.out.println(json.get("date"));
}
}
在另一个java文件中
Calendar expiry = Calendar.getInstance();
expiry.set(2021,1,31,0,0) //When my program expires:year, month, date, hour, min
Calendar now = DateUtils.getAtomicTime();
//where DateUtils.getAtomicTime comes from this class that pulls current time from the National Institute of Standards and Technology
//https://www.rgagnon.com/javadetails/java-0589.html
if (now.after(expiry)) {
shutdown()
}else{
startProgram()
}
}
如何将calendar now-dateutils.getatomictime()更改为这个新api
我的问题:我不知道如何使用我必须检查的时间和参考它。
喜欢它正确地打印时间,但是现在我如何使用printlnjsontostring,然后使用它将它添加到上面的代码中,以比较我设置的过期日期和api日期。
请给我一些建议。谢谢您。
3条答案
按热度按时间icnyk63a1#
巴兹尔布尔克的答案指引你走向正确的方向。这个答案集中在你应该写什么代码上。
全班同学,
Instant
充当传统日期时间api和现代日期时间api之间的桥梁。转换java.util.Calendar
对象(从中获取json.get("date")
)至Instant
使用Calendar#toInstant
.对于到期日期,可以创建
Instant
对象使用OffsetDateTime
对象集ZoneOffset.UTC
.最后,您可以比较
Instant
使用Instant#isAfter
.根据上面给出的解释,您需要编写以下代码:
从trail:date-time了解现代日期时间api。
注意,api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
lztngnrs2#
热释光;博士
你的问题不清楚。但您似乎想比较从1970-01-01t00:00z以来以整秒文本数字表示的某个时刻与从远程时间服务器使用未解释的库捕获的当前时刻后的某个日历日数。
详细信息
从不使用
Calendar
. 这个糟糕的类在几年前被现代的java.time类所取代。将epoch秒转换为
Instant
通过呼叫Instant.ofEpochSecond
. 通过along
从文本输入中解析。显然是打电话给
DateUtils.getAtomicTime
你没提到的某个图书馆的Java.until.Date
. 把那个可怕的遗留类转换成现代的替代品,java.time.Instant
. 注意新的to…
以及from…
添加到旧遗留类的转换方法。与当前时刻相比。
你评论了“x天数”。你是指日历日还是一般的24小时?如果是后者:
如果您是指日历日,请应用时区。
所有这些已经在堆栈溢出上讨论过很多次了。搜索以了解更多信息。
3pmvbmvn3#
似乎目标是在
date
服务器响应和调用的元素shutdown
如果比当前时间早。我不会创建日历示例,而是将当前epoch时间与http响应中的值进行比较。