在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个小时。我如何实现它?”,这显然与解析无关。你说得对,我得到了更正。回答很好。