如何使用java.util.Date进行日历算术?

时间:2011-05-05 08:28:03

标签: java

目前我有一个表示时间的Date对象。我如何为这个对象添加5分钟?

6 个答案:

答案 0 :(得分:48)

您可以使用Calendar,这样可以轻松添加任意长度的时间:

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, 5);
Date newDate = cal.getTime();

对于您的情况,您可以添加时间(以毫秒为单位):

Date newDate = new Date(date.getTime() + 5 * 60 * 1000L);

答案 1 :(得分:8)

考虑使用Joda-Time。这是一个使日期和时间处理比内置处理更令人愉快的库。

DateTime课程提供了plusMinutes方法。

DateTime now = DateTime.now( DateTimeZone.forID( "America/Montreal" ) );
DateTime inFiveMinutes = now.plusMinutes( 5 );

答案 2 :(得分:5)

日期的时间以毫秒为单位。但是,您可能会发现使用long对于此类计算更为简单。

Date date1 = new Date();
long time1 = date1.getTime();
long time2 = time1 + 5 * 60 * 1000;
Date date2 = new Date(time2);

如果使用普通long,则可以删除带有Date对象的行。

答案 3 :(得分:4)

使用Java 8有新选项。实际上Joda Time建议尽快转移到Java 8 Date和Time API。以下是从此链接添加时间的示例:

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

以下代码为当前时间增加了5分钟:

LocalDateTime now = LocalDateTime.now();
now = now.plusMinutes(5);
System.out.println(now);

答案 4 :(得分:2)

TL;博士

myDate.toInstant()
      .plus( 5 , ChronoUnit.MINUTES )

你没有

Date类是不再使用的麻烦的旧日期类的一部分。它们被java.time类取代。

Instant

使用添加到旧类的新方法将Date转换为Instant。两者都代表UTC时间轴上的一个时刻,但较新的类具有更精细的纳秒级分辨率。

Instant instant = myDate.toInstant() ;

添加五分钟很容易。

Instant later = instant.plus( 5 , ChronoUnit.MINUTES ) ;

或使用Duration

Duration d = Duration.ofMinutes( 5 ) ;
Instant later = instant.plus( d ) ;

答案 5 :(得分:0)

在Java 7中,您可以使用Apache Commons库中的DateUtils类:

Date dateWithFiveMinutesAdded = DateUtils.addMinutes(date, 5);

Joda-Time图书馆:

Date dateWithFiveMinutesAdded = new DateTime(date).plusMinutes(5).toDate();

如果您使用Java 8并且不想使用任何外部库,请考虑新的内置Java 8 Date / Time API:

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plus(5, ChronoUnit.MINUTES));

或者:

Date dateWithFiveMinutesAdded = Date.from(date.toInstant().plusSeconds(5 * 60));

但是对于Java 8,您应该使用Instant,ZonedDateTime或LocalDateTime而不是Date。

显然还有很多方法可以做到这一点,但在我看来,在代码清晰度方面,它们非常干净和紧凑。