我想从当前时间获取前一天(24 小时)。
例如,如果当前时间是Date currentTime = new Date();
格林威治标准时间 2011-04-25 12:15:31:562
如何确定时间即
格林威治标准时间 2011-04-24 12:15:31:562
您可以使用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 小时前……您需要考虑时区等。您可能想要使用LocalDateTime
orInstant
代替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 c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.DATE, -1);
Date d = c.getTime();
如果您要返回 24 小时,您将使用Calendar.HOUR_OF_DAY
java.util
日期时间 API 及其格式化 API已SimpleDateFormat
过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *。
请注意,从 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了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。