一小时后更改Java日期

时间:2012-01-12 10:18:53

标签: java date

我有一个Java日期对象:

Date currentDate = new Date();

这将给出当前的日期和时间。例如:

Thu Jan 12 10:17:47 GMT 2012

相反,我希望得到日​​期,将其更改为一小时,这样它应该给我:

Thu Jan 12 09:17:47 GMT 2012

最好的方法是什么?

10 个答案:

答案 0 :(得分:187)

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

答案 1 :(得分:59)

与@Sumit Jain的解决方案类似

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

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

答案 2 :(得分:11)

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

注意在这一瞬间发生的事情是如何跳回到昨天的日期。

ZonedDateTime

如果您关心某个时区,请使用ZonedDateTime课程。您可以从Instant开始并指定一个时区ZoneId对象。此类处理必要的异常调整,例如Daylight Saving Time (DST)

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.time类型更新的旧代码,请调用转换方法。以下是从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及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 3 :(得分:8)

使用Calendar

Calendar cal = Calendar.getInstance();

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

答案 4 :(得分:7)

或者使用着名的Joda Time库:

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

答案 5 :(得分:6)

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

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

答案 6 :(得分:1)

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

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

同样地从你的日期减去20秒

newDate = DateUtils.addSeconds(date, -20)    

答案 7 :(得分:0)

它对我有用,而不是使用format。要使用时间,只需使用parse和toString()方法

String localTime =“ 6:11”; LocalTime localTime = LocalTime.parse(localtime)

LocalTime lt = 6:11; localTime = lt.toString()

答案 8 :(得分:0)

要减去小时数,您需要使用HOUR_OF_DAY常量。在其中包括带负号的数字。这就是您要减少的时间。所有这些操作都是通过Calendar add()方法完成的。

以下是示例:

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

答案 9 :(得分:-2)

以毫秒为单位获取时间,减去分钟数(以毫秒为单位)并将其转换为日期。在这里你需要客观化一个!!!

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