用Java减少日期

时间:2011-04-27 05:32:12

标签: java datetime date utilities

我想从当前时间开始前一天(24小时)。

例如,如果当前时间是Date currentTime = new Date();

  

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

如何确定时间,即

  

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

5 个答案:

答案 0 :(得分:30)

您可以使用Calendar class执行此操作:

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

答案 1 :(得分:10)

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

DateTime yesterday = new DateTime().minusDays(1);

请注意,“昨天这个时间”并不总是在24小时前...但您需要考虑时区等。您可能希望使用LocalDateTimeInstant代替{{ 1}}。

答案 2 :(得分:2)

请在这里结帐: Java Date vs Calendar

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();

答案 3 :(得分:1)

24小时和1天不是一回事。但是你们都使用日历:

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

如果你要回去24小时,你会使用Calendar.HOUR_OF_DAY

答案 4 :(得分:0)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

另外,下面引用的是来自 home page of 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

ONLINE DEMO

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

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

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project