在Java中对日期进行递减



我想从当前时间得到前一天(24小时)。

e。g如果当前时间为Date currentTime = new Date();

2011-04-25 12:15:31:52 GMT

如何确定时间即

2011-04-24 12:15:31:562 GMT

您可以使用Calendar类:

Calendar cal = Calendar.getInstance();
cal.setTime ( date ); // convert your date to Calendar object
int daysToDecrement = -1;
cal.add(Calendar.DATE, daysToDecrement);
date = cal.getTime(); // again get back your date object

我建议您从Joda Time开始,这是一个好得多的API。然后你可以使用:

DateTime yesterday = new DateTime().minusDays(1);
请注意,"昨天的这个时候"并不总是24小时前。你需要考虑时区等等。您可以使用LocalDateTimeInstant来代替DateTime

请在这里结帐:Java日期与日历

Calendar cal=Calendar.getInstance();
cal.setTime(date); //not sure if date.getTime() is needed here
cal.add(Calendar.DAY_OF_MONTH, -1);
Date newDate = cal.getTime();

24小时和1天不是一回事。但是你可以同时使用Calendar:

Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.DATE, -1);
Date d = c.getTime();

如果您要返回24小时,您将使用Calendar.HOUR_OF_DAY

java.time

java.util日期-时间API和它们的格式化API, SimpleDateFormat是过时的和容易出错的。建议完全停止使用它们,切换到现代的Date-Time API*

另外,下面引用的是来自Joda-Time:

主页的通知

注意,从Java SE 8开始,用户被要求迁移到Java。time (JSR-310)——JDK的核心部分,取代了这个项目。

使用java.time的解决方案,现代日期-时间API:

import java.time.Instant;
import java.time.temporal.ChronoUnit;
public class Main {
    public static void main(String[] args) {
        Instant now = Instant.now();
        System.out.println("Now:       " + now);
        Instant yesterday = now.minus(1, ChronoUnit.DAYS);
        System.out.println("Yesterday: " + yesterday);
    }
}

示例运行的输出:

Now:       2021-07-16T20:40:24.402592Z
Yesterday: 2021-07-15T20:40:24.402592Z
<<p> 在线演示/kbd>

无论出于何种原因,如果您需要将Instant的对象转换为java.util.Date的对象,您可以这样做:

Date date = Date.from(odt.toInstant());

Trail: Date Time了解更多关于现代日期时间API的信息。


*出于任何原因,如果你必须坚持Java 6或Java 7,你可以使用ThreeTen-Backport,它支持大部分 Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,你的Android API级别仍然不符合Java-8,检查Java 8+可用的API,通过desugaring和如何在Android项目中使用ThreeTenABP。

相关内容

  • 没有找到相关文章

最新更新