在一个小时前更改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
, .Calendar
和java.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一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等。
使用日历 。
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);