我想从当前时间得到前一天(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小时前。你需要考虑时区等等。您可以使用LocalDateTime
或Instant
来代替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。