如何为日期对象添加小时数。以下是我的代码:
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));
但它只接受添加的长对象。因此失败了。
请支持解决这个问题。谢谢。
答案 0 :(得分:1)
如果您使用java.time,则可能会更有帮助:
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"));
答案 1 :(得分:1)
有几种方法可以做到
使用日历类
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-time
DateTime dt = new DateTime();
DateTime added = dt.plusHours(4);
如果你最好使用Java 8,那么LocalDateTime
LocalDateTime startDate = LocalDateTime.now();
LocalDateTime stopdate = startDate.plusHours(4);
答案 2 :(得分:0)
Calendar c = Calendar.getInstance();
c.setTimeInMillis(d2.getTime());
c.add(Calendar.HOUR_OF_DAY, 4);
d2 = c.getTime();
答案 3 :(得分:0)
java.time
。 API更加一致,并且可以更好地满足这些类型的操作。
但是,按原样回答您的问题...一个选项是使用Date
调整get/setTime()
实例的毫秒形式,如下所示:
@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);
}
希望有所帮助!
答案 4 :(得分:0)
如果可以的话,我建议您使用JDK8时间API或joda-time 日期的旧java api太糟糕了!
在您的情况下,您可以:
//commons-lang3
Date oldDate = new Date();
Date newDate = DateUtils.addHours(oldDate, 1);
OR
将日期转换为时间戳,添加一些工厂并将时间戳转换回日期
答案 5 :(得分:0)
Date
或SimpleDateFormat
类。 示例代码:
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 类而不是麻烦的旧遗留日期时间类。切勿使用Date
,Calendar
,SimpleDateFormat
。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uu/MM/dd HH:mm:ss" ) ;
显然,您的输入缺少时区指示符或与UTC的偏移量。因此解析为LocalDateTime
。
LocalDateTime ldt = LocalDateTime.parse( "18/01/23 12:34:56" ) ;
ldt.toString():2018-01-23T12:34:56
LocalDateTime
没有time zone或offset-from-UTC的概念。所以不表示实际时刻,并且不时间轴上的一个点。 LocalDateTime
只是对大约26-27小时范围内潜在时刻的粗略概念。
如果您确定输入数据是为了表示特定区域中的片刻,请应用ZoneId
生成ZonedDateTime
。 ZonedDateTime
表示实际时刻,即时间轴上的一个点。
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 instant = zdt.toInstant() ;
表示未附加到时间轴的时间跨度为Duration
个对象。
Duration d = Duration.ofHours( 4 ) ; // Four hours, as an object.
如果不使用时区,请添加到LocalDateTime
。
LocalDateTime ldtLater = ldt.plus( d ) ;
如果使用分区值,请添加到ZonedDateTime
。
ZonedDateTime zdtLater = zdt.plus( d ) ;
如果您愿意,这些类还提供快捷方式。
ZonedDateTime zdtLater = zdt.plusHours( 4 ) ; // Alternative to using `Duration` object.
使用Duration
而不是快捷方法的一个好处是拥有一个可以命名的对象。
Duration halfShiftLater = Duration.ofHours( 4 ) ;
…
ZonedDateTime zdtLater = zdt.plus( halfShiftLater ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。