如何从现在开始使用Java减去30天,3个月和1年的时间?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从现在开始使用Java减去30天,3个月和1年的时间?相关的知识,希望对你有一定的参考价值。
我现在有一个EpochTime,我想获得30天,3个月和1年后的epoch时间。如何在Java代码中做到这一点。
long todayEpochTime = System.currentTimeMillis()/1000;
System.out.println(todayEpochTime);
答案
使用LocalDate
我们可以尝试:
LocalDate date = LocalDate.now().minusDays(30).minusMonths(3).minusYears(1);
ZoneId zoneId = ZoneId.systemDefault();
long newEpoch = date.atStartOfDay(zoneId).toEpochSecond();
截至撰写本问题时,日期为2019年12月9日,新的纪元值对应于该日期:
Wednesday, August 8, 2018 10:00:00 PM
另一答案
显然,从1970年1月的UTC 1970-01-01T00:00:00.0Z的纪元参考开始算起,您有整秒的计数。
解析为Instant
。
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
在任何给定时刻,日期在全球各地时区都会有所不同。在日本东京的午夜之后,一些监视器是新的一天,而在美国俄亥俄州的托莱多仍然是“昨天”。
应用您想用来感知日期的时区。将ZoneId
传递到Instant
以获取ZonedDateTime
。
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
减去您的时间跨度。
ZonedDateTime thirtyDaysEarlier = zdt.minusDays( 30 ) ;
ZonedDateTime threeMonthsEarlier = zdt.minusMonths(3);ZonedDateTime oneYearEarlier = zdt.minusYears 1);
如果只关心日期部分,没有时间和时区,则提取LocalDate
。然后执行相同的日期计算。
LocalDate localDate = zdt.toLocalDate() ;
另一答案
您可以从特定Instant
的纪元处获取毫秒的ZoneId
实例,然后减去天,月和年
long todayEpochTime = System.currentTimeMillis();
long dateTime = Instant.ofEpochMilli(todayEpochTime)
.atZone(ZoneId.systemDefault())
.minusDays(30)
.minusMonths(3)
.minusYears(1)
.toEpochSecond();
System.out.println(todayEpochTime);
System.out.println(dateTime);
以上是关于如何从现在开始使用Java减去30天,3个月和1年的时间?的主要内容,如果未能解决你的问题,请参考以下文章