一小时前更改 Java 日期

我有一个 Java 日期对象:

Date currentDate = new Date();

这将显示当前的日期和时间。例如:

Thu Jan 12 10:17:47 GMT 2012

相反,我想得到的日期,改为一个小时回来,这样它应该给我:

Thu Jan 12 09:17:47 GMT 2012

最好的方法是什么?

246461 次浏览

使用 日历

Calendar cal = Calendar.getInstance();


cal.setTime(new Date());
cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) - 1);

Java.util. 日历

Calendar cal = Calendar.getInstance();
// remove next line if you're always using the current time.
cal.setTime(currentDate);
cal.add(Calendar.HOUR, -1);
Date oneHourBack = cal.getTime();

Java.util 日期

new Date(System.currentTimeMillis() - 3600 * 1000);

Org.joda. time. LocalDateTime

new LocalDateTime().minusHours(1)

Java8: Java.time. LocalDateTime

LocalDateTime.now().minusHours(1)

Java8 Java.time. 即时

// always in UTC if not timezone set
Instant.now().minus(1, ChronoUnit.HOURS));
// with timezone, Europe/Berlin for example
Instant.now()
.atZone(ZoneId.of("Europe/Berlin"))
.minusHours(1));

从日期中减去一小时内的毫秒数。

currentDate.setTime(currentDate.getTime() - 3600 * 1000));

或者使用著名的 乔达时间库:

DateTime dateTime = new DateTime();
dateTime = dateTime.minusHours(1);
Date modifiedDate = dateTime.toDate();

类似于@Sumit Jain 的解决方案

Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000);

或者

Date currentDate = new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1));

博士

协调世界时:

Instant.now().minus( 1 , ChronoUnit.HOURS )

或者,分区:

Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )

使用 java.time

Java8和更高版本内置了新的 爪哇时间框架。

Instant

如果您只关心 UTC (GMT) ,那么使用 Instant类。

Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );

转到控制台。

System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );

时间: 2015-10-29T00:37:48.921 Z | 时间: 2015-10-28T23:37:48.921 Z

请注意,在这一瞬间,如何发生跳过回到昨天的日期。

ZonedDateTime

如果您关心一个时区,使用 ZonedDateTime类。您可以从一个 Instant 开始,然后分配一个时区,一个 ZoneId对象。这个类处理异常(如 夏时制)的必要调整。

Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );

转到控制台。

System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );

瞬间: 2015-10-29 T00:50:30.778 Z

Zdt: 2015-10-28T20:50:30.778-04:00[美国/蒙特利尔]

2015-10-28T19:50:30.778-04:00[美国/蒙特利尔]

转换

旧的 java.util.Date/. Calendar 类现在已经过时了。避免使用它们。它们是出了名的麻烦和混乱。

当您必须使用旧类来操作尚未更新 java.time 类型的旧代码时,调用转换方法。下面是从 Instant 或 ZonedDateTime 到 java.util 的示例代码。日期。

java.util.Date date = java.util.Date.from( instant );

或者..。

java.util.Date date = java.util.Date.from( zdt.toInstant() );

关于 爪哇时间

< em > java.time 框架内置于 Java8及更高版本中。这些类取代了令人讨厌的旧的 遗产日期时间类,如 java.util.DateCalendarSimpleDateFormat

现在在 维修模式中的 尤达时间项目建议迁移到 爪哇时间类。

要了解更多,请参阅 < em > Oracle 教程 。并搜索堆栈溢出许多例子和解释。规范是 JSR 310

您可以直接与数据库交换 爪哇时间对象。使用与 JDBC 4.2或更高版本兼容的 JDBC 驱动程序。不需要字符串,不需要 java.sql.*类。

从哪里获得 java.time 类?

< strong > Three Ten-Ultra 项目使用其他类扩展 java.time。这个项目是将来可能添加 java.time 的试验场。您可以在这里找到一些有用的类,比如 IntervalYearWeekYearQuarter更多

你可以用下面的代码来表示日期和时间:

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
System.out.println("Current Date Time : " + dateFormat.format(cal.getTime()));


cal.add(Calendar.DATE, 1);
System.out.println("Add one day to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
System.out.println("Add one month to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
System.out.println("Add one year to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 1);
System.out.println("Add one hour to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 1);
System.out.println("Add one minute to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 1);
System.out.println("Add one second to current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println("Subtract one day from current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
System.out.println("Subtract one month from current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
System.out.println("Subtract one year from current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.HOUR, -1);
System.out.println("Subtract one hour from current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, -1);
System.out.println("Subtract one minute from current date : " + dateFormat.format(cal.getTime()));


cal = Calendar.getInstance();
cal.add(Calendar.SECOND, -1);
System.out.println("Subtract one second from current date : " + dateFormat.format(cal.getTime()));

产出:

Current Date Time : 2008/12/28 10:24:53
Add one day to current date : 2008/12/29 10:24:53
Add one month to current date : 2009/01/28 10:24:53
Add one year to current date : 2009/12/28 10:24:53
Add one hour to current date : 2008/12/28 11:24:53
Add one minute to current date : 2008/12/28 10:25:53
Add one second to current date : 2008/12/28 10:24:54
Subtract one day from current date : 2008/12/27 10:24:53
Subtract one month from current date : 2008/11/28 10:24:53
Subtract one year from current date : 2007/12/28 10:24:53
Subtract one hour from current date : 2008/12/28 09:24:53
Subtract one minute from current date : 2008/12/28 10:23:53
Subtract one second from current date : 2008/12/28 10:24:52

这个链接很好: 看这里

看: 你也看到了

还有: 给你

还有: 给你

还有: 给你

如果你需要时间:

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

获取以毫秒为单位的时间,减去以毫秒为单位的分钟,并将其转换为 Date。在这里你需要物化一个! ! !

    int minutes = 60;
long currentDateTime = System.currentTimeMillis();
Date currentDate = new Date(currentDateTime - minutes*60*1000);
System.out.println(currentDate);

这可以通过使用 java.util.Date来实现。下面的代码将从您的日期中减去1小时。

Date date = new Date(yourdate in date format);
Date newDate = DateUtils.addHours(date, -1)

同样地,从你的约会中减去20秒

newDate = DateUtils.addSeconds(date, -20)

对我来说,使用 format 就可以了,只要使用 parse 和 toString ()方法就可以处理时间

字符串 localTime = “6:11”; LocalTime localTime = LocalTime.parse (LocalTime)

当地时间 t = 6:11; LocalTime = lt.toString ()

要减去小时,需要使用 HOUR_OF_DAY常量。其中,包括负号的数字。这就是你想要减少的工作时间。所有这些都是在 Calendaradd()方法下完成的。

下面是一个例子:

import java.util.Calendar;
public class Example {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println("Date : " + c.getTime());
// 2 hours subtracted
c.add(Calendar.HOUR_OF_DAY, -2);
System.out.println("After subtracting 2 hrs : " + c.getTime());
}
}

以下是输出结果:

Date : Sun Dec 16 16:28:53 UTC 2018
After subtracting 2 hrs : Sun Dec 16 14:28:53 UTC 2018