在一个小时前更改Javadate

我有一个Javadate对象:

Date currentDate = new Date(); 

这将给出当前的date和时间。 例:

 Thu Jan 12 10:17:47 GMT 2012 

相反,我想得到date,把它改为一个小时,所以它应该给我:

 Thu Jan 12 09:17:47 GMT 2012 

什么是最好的办法呢?

java.util.Calendar中

 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.Date

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

org.joda.time.LocalDateTime

 new LocalDateTime().minusHours(1) 

Java 8:java.time.LocalDateTime

 LocalDateTime.now().minusHours(1) 

Java 8 java.time.Instant

 // 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)); 

类似于@Sumit Jain的解决scheme

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

要么

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

TL;博士

在UTC :

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

或者划分:

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

使用java.time

Java 8及更高版本内置了新的java.time框架。

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.921Z | instantHourEarlier:2015-10-28T23:37:48.921Z

请注意,在这个瞬间发生的事情是如何跳回到昨天的date。

ZonedDateTime

如果您关心时区,请使用ZonedDateTime类。 您可以从Instant开始,并指定一个时区ZoneId对象。 此课程将处理夏令时(DST)等exception情况的必要调整。

 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-29T00:50:30.778Z

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

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

转变

旧的java.util.Date/.Calendar类现在已经过时了。 避免他们。 他们是非常麻烦和混乱的。

当您必须使用旧的类来处理尚未针对java.timetypes更新的旧代码时,请调用转换方法。 以下是从Instant或ZonedDateTime到java.util.Date的示例代码。

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

…要么…

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

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧date时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。

大部分的java.timefunction在ThreeTen-Backport中移植到Java 6&7中,并进一步适用于ThreeTenABP中的 Android (请参阅如何使用… )。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter等等。

使用日历 。

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

或者使用着名的Joda时间库:

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

只需从date减去一小时内的毫秒数。

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

您可以从波纹pipe代码中使用date和时间:

 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"); 

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

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

同样从你的date减去20秒

 newDate = DateUtils.addSeconds(date, -20) 

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

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