在java中向日期对象添加以小时为单位的时间?

在java中向日期对象添加以小时为单位的时间?,java,date,time,Java,Date,Time,如何向日期对象添加小时数。下面是我的代码: String dateStart = timeStamp; String dateStop = valueCon; SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss"); Date d1 = null; Date d2 = null; d1 = format.parse(dateStart); d2 = format.parse(datestop); 我想向d2日

如何向日期对象添加小时数。下面是我的代码:

String dateStart = timeStamp;
String dateStop = valueCon;

SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");

Date d1 = null;
Date d2 = null;

d1 = format.parse(dateStart);
d2 = format.parse(datestop);
我想向d2日期对象添加4小时。我如何做到这一点

我尝试使用:

Date modd1= new Date(d2+TimeUnit.MINUTES.toHours(240));
但它只接受用于添加的长对象。因此失败了

请支持解决此问题。请提前感谢。

如果您正在使用它,则会更有帮助:

LocalDateTime dateStart = LocalDateTime.now();
LocalDateTime dateStop = dateStart.plusHours(4);
要设置日期格式,可以使用:

String d1 = dateStart.format(DateTimeFormatter.ofPattern("yy/MM/dd HH:mm:ss"));
String d2 = dateStop.format(DateTimeFormatter.ofPattern("yy/MM/dd HH:mm:ss"));

有几种方法可以做到

使用日历类

Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(anyDateObject); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, 4); // adds four hour
Date date = cal.getTime(); // returns new date object 
如果您使用的是ApacheCOmmon Lang

Date newDate = DateUtils.addHours(oldDate, 3);
如果您使用的是Joda时间

DateTime dt = new DateTime();
DateTime added = dt.plusHours(4);
如果您使用的是Java 8,最好是LocalDateTime

LocalDateTime startDate = LocalDateTime.now();
LocalDateTime stopdate = startDate.plusHours(4);

你可以这样做

Calendar c = Calendar.getInstance();
c.setTimeInMillis(d2.getTime());
c.add(Calendar.HOUR_OF_DAY, 4);
d2 = c.getTime();

和其他人一样,如果可以的话,我建议使用
java.time
。这些API更加一致,在满足这些类型的操作方面做得更好

然而,现在就回答你的问题。。。一个选项是使用
get/setTime()
调整
Date
实例的毫秒形式,如下所示:

@Test
public void adjustTime() {
    final Date date = new Date();

    System.out.println("## Before adding four hours: " + date);

    date.setTime(date.getTime() + TimeUnit.HOURS.toMillis(4));

    System.out.println("## After adding four hours: " + date);
}

希望有帮助

如果可以,我建议您使用JDK8时间API或joda时间。
date的旧JavaAPI太糟糕了

在您的情况下,您可以:

//commons-lang3
Date oldDate = new Date();
Date newDate = DateUtils.addHours(oldDate, 1);

将日期转换为时间戳,添加一些磨坊并将时间戳转换回日期

tl;博士
  • 切勿使用
    Date
    SimpleDateFormat
  • 仅使用现代java.time类
示例代码:

LocalDateTime.parse(          // Parsing input string to an object without concept of zone or offset.
    "18/01/23 12:34:56" ,     // Input lacking indicator of zone/offset.
    DateTimeFormatter.ofPattern( "uu/MM/dd HH:mm:ss" )  // Define formatting pattern matching your input.
)
.plusHours( 4 )               // Add four hours. Generating a new `LocalDateTime` object, per immutable objects pattern.
.toString()                   // Generate a String in standard ISO 8601 format.
2018-01-23T16:34:56

java.time 现代方法使用java.time类,而不是麻烦的旧遗留日期时间类。切勿使用
日期
日历
简化格式

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uu/MM/dd HH:mm:ss" ) ;
未分区 显然,您的输入缺少时区或UTC偏移的指示器。因此,将其解析为
LocalDateTime

LocalDateTime ldt = LocalDateTime.parse( "18/01/23 12:34:56" ) ; 
ZonedDateTime zdtLater = zdt.plus( d ) ; 
ldt.toString():2018-01-23T12:34:56

A没有或的概念。因此,它并不代表一个实际的时刻,也不是时间线上的一个点。
LocalDateTime
只是一个关于26-27小时范围内潜在时刻的粗略概念

分区 如果您确实知道输入数据用于表示特定区域中的某个时刻,请应用
ZoneId
生成
zoneDateTime
ZoneDateTime
确实代表了一个实际时刻,即时间线上的一个点

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;  // Determining an actual moment.
zdt.toString():2018-01-23T12:34:56+01:00[非洲/突尼斯]

要查看UTC中的同一时刻,请提取一个
瞬间

Instant instant = zdt.toInstant() ;
数学 将未附加到时间线的时间跨度表示为
持续时间
对象

Duration d = Duration.ofHours( 4 ) ;  // Four hours, as an object.
如果不使用时区,请添加到您的
LocalDateTime

LocalDateTime ldtLater = ldt.plus( d ) ;
如果使用分区值,请添加到
zoneDateTime

LocalDateTime ldt = LocalDateTime.parse( "18/01/23 12:34:56" ) ; 
ZonedDateTime zdtLater = zdt.plus( d ) ; 
如果您愿意,这些类还提供快捷方式方法

ZonedDateTime zdtLater = zdt.plusHours( 4 ) ;  // Alternative to using `Duration` object.
使用
持续时间
而不是快捷方式方法的一个好处是可以命名一个对象

Duration halfShiftLater = Duration.ofHours( 4 ) ;
…
ZonedDateTime zdtLater = zdt.plus( halfShiftLater ) ; 

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(请检查这个问题,考虑切换到代码> java)。时间< /COD> FY,麻烦的旧日期时间类,例如,和<代码> java .Text。SimuleDealFrase现在被由java 8和以后构建的类所取代。参见。“我想给d2日期对象添加4个小时。我如何实现它?”,这显然与解析无关。你说得对,我得到了更正。回答很好。