在日期时间格式java中添加小时

时间:2012-12-13 06:03:12

标签: java

SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
Date time1 = parser.parse("7:30");

现在,如果我想再向time1添加2个小时,例如:

7:30 + 2 = 9:30

如何添加2小时?

3 个答案:

答案 0 :(得分:7)

不推荐使用

java.util.Date,您应该使用java.util.Calendar

SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
Date myDate = parser.parse("7:30");
Calendar cal =Calendar.getInstance();
cal.setTime(myDate);
cal.add(Calendar.HOUR_OF_DAY,2); // this will add two hours
myDate = cal.getTime();

更好的解决方案是使用Joda Time - Java date and time API

从他们的网站 - Joda-Time提供Java日期和时间类的高质量替代。

答案 1 :(得分:3)

java.util.Date转换为java.util.Calendar对象并使用Calendar.add()方法添加小时数

SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
Date time1 = parser.parse("7:30");
Calendar cal =Calendar.getInstance();
cal.setTime(time1);
cal.add(Calendar.Hour_Of_Day, 2);
time1 =cal.getTime();
System.out.println(parser.format(time1));//returns 09:30

答案 2 :(得分:1)

TL;博士

LocalTime.parse( "07:30" ).plusHours( 2 )

...或...

ZonedDateTime.now( ZoneId.of( " Pacific/Auckland" ) )
    .plusHours( 2 )

java.time

应该避免旧的日期时间类,例如java.util.Date,.Calendar和java.text.SimpleDateFormat,现在由java.time类取代。

LocalTime

对于仅限时间的值,请使用LocalTime类。

LocalTime lt = LocalTime.parse( "07:30" );
LocalTime ltLater = lt.plusHours( 2 );  
String output = ltLater.toString();  // 09:30

Instant

对于给定的java.util.Date,使用添加到旧类的新方法转换为java.time。 Instant类表示UTC时间轴上的一个时刻,分辨率为纳秒。

Instant instant = myUtilDate.toInstant();

或以Instant捕获UTC中的当前时刻。

Instant instant = Instant.now();

加秒两小时。 TimeUnit类可以将小时数转换为秒数。

long seconds = TimeUnit.HOURS.toSeconds( 2 );
Instant instantLater = instant.plusSeconds( seconds );

ZonedDateTime

要查看某个社区的挂钟时间,请应用时区。应用ZoneId获取ZonedDateTime对象。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

您可以添加小时数。 ZonedDateTime类处理夏令时等异常。

ZonedDateTime zdtLater = zdt.plusHours( 2 );

Duration

您可以将这两个小时表示为对象。

Duration d = Duration.ofHours( 2 ) ;
ZonedDateTime zdtLater = zdt.plus( d ) ;