在Java中添加n个小时到一个date?
如何将n小时添加到Date对象? 我发现在StackOverflow上使用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(); }