如何在Date对象中添加n小时?我在StackOverflow上找到了另一个使用天数的例子,但仍然不明白如何用数小时来做。
答案 0 :(得分:197)
检查日历类。它有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了解更多信息。
答案 1 :(得分:70)
如果您使用Apache Commons / Lang,则可以使用DateUtils.addHours()
一步完成:
Date newDate = DateUtils.addHours(oldDate, 3);
(原始对象不变)
答案 2 :(得分:28)
简化@ Christopher的例子。
假设你有一个常数
public static final long HOUR = 3600*1000; // in milli-seconds.
你可以写。
Date newDate = new Date(oldDate.getTime() + 2 * HOUR);
如果您使用 long 来存储日期/时间而不是Date对象,那么
long newDate = oldDate + 2 * HOUR;
答案 3 :(得分:23)
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
答案 4 :(得分:23)
myJavaUtilDate.toInstant()
.plusHours( 8 )
或者...
myJavaUtilDate.toInstant() // Convert from legacy class to modern class, an `Instant`, a point on the timeline in UTC with resolution of nanoseconds.
.plus( // Do the math, adding a span of time to our moment, our `Instant`.
Duration.ofHours( 8 ) // Specify a span of time unattached to the timeline.
) // Returns another `Instant`. Using immutable objects creates a new instance while leaving the original intact.
Java 8及更高版本中内置的java.time框架取代了旧的Java.util.Date/.Calendar类。那些古老的课程非常麻烦。避免它们。
使用新添加到java.util.Date的toInstant
方法将旧类型转换为新的java.time类型。 Instant
是UTC中时间线上的一个时刻,分辨率为nanoseconds。
Instant instant = myUtilDate.toInstant();
您可以通过TemporalAmount
传递Duration
来为Instant
添加小时数。
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
要读取该日期时间,请通过调用toString
生成标准ISO 8601格式的字符串。
String output = instantHourLater.toString();
您可能希望通过某个地区wall-clock time的镜头看到那一刻。通过创建ZonedDateTime
Instant
调整为所需/预期的时区
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
或者,您可以致电plusHours
添加您的小时数。划分区域意味着夏令时(DST),其他异常将代表您处理。
ZonedDateTime later = zdt.plusHours( 8 );
您应该避免使用旧的日期时间类,包括java.util.Date
和.Calendar
。但是,如果您确实需要java.util.Date
与尚未针对java.time类型更新的类的互操作性,请从ZonedDateTime
转换为Instant
。添加到旧类的新方法有助于转换为/从java.time类型转换。
java.util.Date date = java.util.Date.from( later.toInstant() );
有关转换的更多讨论,请参阅my Answer至问题Convert java.util.Date to what “java.time” type?。
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。
答案 5 :(得分:21)
答案 6 :(得分:14)
类似的东西:
Date oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
答案 7 :(得分:11)
使用新的java.util.concurrent.TimeUnit课程,你可以这样做
Date oldDate = new Date(); // oldDate == current time
Date newDate = new Date(oldDate.getTime() + TimeUnit.HOURS.toMillis(2)); // Adds 2 hours
答案 8 :(得分:6)
当Date
对象采用Datetime格式时,这是另一段代码。这段代码的优点是,如果您提供更多的小时数,日期也会相应更新。
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
答案 9 :(得分:4)
您可以使用Joda DateTime API
来完成DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
答案 10 :(得分:4)
如果您愿意使用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.
答案 11 :(得分:3)
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);
答案 12 :(得分:0)
使用Java 8类。我们可以很容易地操纵日期和时间,如下所示。
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
答案 13 :(得分:0)
您可以使用Java 8中的LocalDateTime类。例如:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
答案 14 :(得分:-1)
您可以使用此方法,易于理解和实施:
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();
}