【发布时间】:2011-08-13 13:49:33
【问题描述】:
我想从当前时间获取前一天(24 小时)。
例如,如果当前时间是Date currentTime = new Date();
2011-04-25 12:15:31:562 GMT
如何确定时间,即
2011-04-24 12:15:31:562 GMT
【问题讨论】:
标签: 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
【问题讨论】:
标签: java datetime date utilities
java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*。
另外,下面引用的是来自home page of Joda-Time的通知:
请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。
使用现代日期时间 API java.time 的解决方案:
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 了解有关现代日期时间 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。
【讨论】:
您可以使用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
【讨论】:
请在此处查看: 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();
【讨论】:
24 小时和 1 天不是一回事。但你都使用日历:
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.DATE, -1);
Date d = c.getTime();
如果您要返回 24 小时,您将使用 Calendar.HOUR_OF_DAY
【讨论】: