我想从当前时间开始前一天(24小时)。
例如,如果当前时间是Date currentTime = new Date();
2011-04-25 12:15:31:562 GMT
如何确定时间,即
2011-04-24 12:15:31:562 GMT
答案 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小时前...但您需要考虑时区等。您可能希望使用LocalDateTime
或Instant
代替{{ 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.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
出于任何原因,如果您需要将 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 desugaring 和 How to use ThreeTenABP in Android Project。