Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Java 如何从当前日期的历元时间中获取前几天的天数?_Java_Date_Time_Format_Epoch - Fatal编程技术网

Java 如何从当前日期的历元时间中获取前几天的天数?

Java 如何从当前日期的历元时间中获取前几天的天数?,java,date,time,format,epoch,Java,Date,Time,Format,Epoch,我有一个场景,大纪元时间在字符串中。我需要将其从当前时间转换为前几天 例如: String epoch=“1600852773514”; 日期到期=新日期(Long.parseLong(epoch)); 到期日为2020年9月23日星期三14:49:33。但我想知道从今天到“纪元”的天数。从今天算起的240天前就是大纪元了 If expiry > 30 days pass else fail 您可以这样做: 到期日=/*…*/; 现在日期=新日期(); 长天数=(now.getTi

我有一个场景,大纪元时间在字符串中。我需要将其从当前时间转换为前几天

例如:

String epoch=“1600852773514”;
日期到期=新日期(Long.parseLong(epoch));
到期日为2020年9月23日星期三14:49:33。但我想知道从今天到“纪元”的天数。从今天算起的240天前就是大纪元了

If expiry > 30 days
pass
else
fail  

您可以这样做:

到期日=/*…*/;
现在日期=新日期();
长天数=(now.getTime()-expiry.getTime())/86_400_000;
如果(天>30)/**/
所以我们以毫秒为单位计算时间差:

long diff=(now.getTime()-expiry.getTime());

如果我们除以86.000.000(这是一天的毫秒数),我们得到过去的天数。

作为替代,您可以使用
java.time
(自java 8以来)并计算两个日期之间的天数:

publicstaticvoidmain(字符串[]args){
//示例字符串
字符串epoch=“1618991673000”;
//将其解析为一个长的
long epochMillis=long.parseLong(历元);
//然后从长值创建一个瞬间
瞬发瞬发=瞬发波克米利(埃波克米利);
//并在UTC(+00:00)将其转换为OffsetDateTime
OffsetDateTime odt=OffsetDateTime.ofInstant(即时,ZoneOffset.UTC);
//获取今天的日期(仅限,不考虑一天中的任何时间)
LocalDate today=LocalDate.now();
//并提取OffsetDateTime的日期
LocalDate=odt.toLocalDate();
//计算两个日期之间的天数
long daysGone=ChronoUnit.DAYS.between(当时,今天);
//并打印结果。。。
System.out.println(“天之间”+然后
+今天(“+today+”):+daysGone);
}
该结果(今天,2021年5月21日):

2021-04-21和今天(2021-05-21)之间的天数:30

之后,您可以轻松检查天数是否大于或小于场景中允许的天数。

转换为实例并使用Duration类:

String  epoch = "1600852773514";
Instant start = Instant.ofEpochMilli(Long.parseLong(epoch));
Instant now   = Instant.now();
Long    diff  = Duration.between(start,now).toDays();

System.out.println(diff);

你试过什么?它在哪里失败?发布您的代码我建议您不要使用
Date
。那门课设计得很糟糕,而且早已过时。改为使用
Instant
LocalDate
和/或来自的其他类。如果到期日为2020年9月23日星期三14:49:33,当前时间为9月24日13:02,是否要已经计算一天(因为日期不同),或者您想只计算今天14:49:33之后的1天?作为一个可能更简单的选择,在到期日期和时间上添加30天(例如使用
ZonedDateTime.plusDays()
),并将结果与当前时刻进行比较。谢谢,这是正确的。虽然大多数日子都有86400000毫秒长,但并非所有日子都是这样。