如何从现在开始使用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年的时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中从日期中减去天数

审查超过 3 个月和最近 30 天内的脚本

PowerShell 从本周五开始获得 12 个月的周五

是否可以让日期数据类型接受 13 作为一个月和 30 作为所有月份?

如何使用 Java 日历从日期中减去 X 天?

MySQL中判断日期间隔的方法