java用date加一个小时_在Java中添加n个小时到一个date?

检查日历类。 它有add方法(和其他一些),以允许时间操纵。 像这样的东西应该工作。

Calendar cal = Calendar.getInstance(); // creates calendar cal.setTime(new Date()); // sets calendar time/date cal.add(Calendar.HOUR_OF_DAY, 1); // adds one hour cal.getTime(); // returns new date object, one hour in the future

检查API了解更多。

如果使用Apache Commons / Lang ,则可以使用DateUtils.addHours()一步完成 :

Date newDate = DateUtils.addHours(oldDate, 3);

(原始对象不变)

与乔达时间

DateTime dt = new DateTime(); DateTime added = dt.plusHours(6);

简化@克里斯托弗的例子。

说你有一个常数

public static final long HOUR = 3600*1000; // in milli-seconds.

你可以写。

Date newDate = new Date(oldDate.getTime() + 2 * HOUR);

如果您使用long来存储date/时间而不是Date对象,则可以这样做

long newDate = oldDate + 2 * HOUR;

自从Java 8:

LocalDateTime.now().minusHours(1);

请参阅LocalDateTime API 。

就像是:

Date oldDate = new Date(); // oldDate == current time final long hoursInMillis = 60L * 60L * 1000L; Date newDate = new Date(oldDate().getTime() + (2L * hoursInMillis)); // Adds 2 hours

TL;博士

myUtilDate.toInstant().plus( Duration.ofHours( 8 ) )

使用java.time

Java 8中内置的java.time框架取代旧的Java.util.Date/.Calendar类。 那些老class子是非常麻烦的。 避免他们。

使用新添加到java.util.Date的toInstant方法将旧types转换为新的java.timetypes。 Instant是UTC时间线上的一个时刻,分辨率为纳秒 。

Instant instant = myUtilDate.toInstant();

您可以通过传递一个TemporalAmount例如Duration来为该Instant添加小时数。

Duration duration = Duration.ofHours( 8 ); Instant instantHourLater = instant.plus( duration );

要读取date时间,请通过调用toString生成标准ISO 8601格式的string。

String output = instantHourLater.toString();

你可能想通过某个地区的挂钟时间的镜头看到这一刻。 通过创build一个ZonedDateTime将Instant调整到您想要的/预期的时区。

ZoneId zoneId = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

或者,您可以拨打plusHours来添加小时数。 被划分区域意味着夏令时(DST)和其他exception将以您的名义处理。

ZonedDateTime later = zdt.plusHours( 8 );

您应该避免使用旧的date时间类,包括java.util.Date和.Calendar 。 但是,如果您确实需要java.util.Date以便与尚未针对java.timetypes更新的类进行互操作,则需要通过Instant从ZonedDateTime进行转换。 添加到旧类的新方法有助于转换为java.timetypes。

java.util.Date date = java.util.Date.from( later.toInstant() );

有关转换的更多讨论,请参阅我的问题的答案 , 将java.util.Date转换为什么“java.time”types? 。

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.Date , Calendar和SimpleDateFormat 。

Joda-Time项目现在处于维护模式 ,build议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

Java SE 8和SE 9及更高版本

内置。

带有捆绑实现的标准Java API的一部分。

Java 9增加了一些小function和修复。

Java SE 6和SE 7

大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。

Android的

ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。

请参阅如何使用…。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval , YearWeek , YearQuarter 等等 。

使用新的java.util.concurrent.TimeUnit类,你可以这样做

Date oldDate = new Date(); // oldDate == current time Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours

当Date对象处于Datetime格式时,这是另一段代码。 这个代码的优点是,如果你给更多的小时数date也会相应地更新。

String myString = "09:00 12/12/2014"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm dd/MM/yyyy"); Date myDateTime = null; //Parse your string to SimpleDateFormat try { myDateTime = simpleDateFormat.parse(myString); } catch (ParseException e) { e.printStackTrace(); } System.out.println("This is the Actual Date:"+myDateTime); Calendar cal = new GregorianCalendar(); cal.setTime(myDateTime); //Adding 21 Hours to your Date cal.add(Calendar.HOUR_OF_DAY, 21); System.out.println("This is Hours Added Date:"+cal.getTime());

这是输出:

This is the Actual Date:Fri Dec 12 09:00:00 EST 2014 This is Hours Added Date:Sat Dec 13 06:00:00 EST 2014

你可以用Joda DateTime API来完成

DateTime date= new DateTime(dateObj); date = date.plusHours(1); dateObj = date.toDate();

如果你愿意使用java.time ,下面是一个添加ISO 8601格式化持续时间的方法:

import java.time.Duration; import java.time.LocalDateTime; ... LocalDateTime yourDate = ... ... // Adds 1 hour to your date. yourDate = yourDate.plus(Duration.parse("PT1H")); // Java. // OR yourDate = yourDate + Duration.parse("PT1H"); // Groovy.

Date argDate = new Date(); //set your date. String argTime = "09:00"; //9 AM - 24 hour format :- Set your time. SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm"); String dateTime = sdf.format(argDate) + " " + argTime; Date requiredDate = dateFormat.parse(dateTime);

你可以使用这个方法,很容易理解和实现:

public static java.util.Date AddingHHMMSSToDate(java.util.Date date, int nombreHeure, int nombreMinute, int nombreSeconde) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.HOUR_OF_DAY, nombreHeure); calendar.add(Calendar.MINUTE, nombreMinute); calendar.add(Calendar.SECOND, nombreSeconde); return calendar.getTime(); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值