Answers:
检查日历类。它具有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以获取更多信息。
Calendar.add()
会自动处理该问题。
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8的Java 9.请参见类教程由Oracle。
如果使用Apache Commons / Lang,则可以使用DateUtils.addHours()
以下步骤一步一步完成:
Date newDate = DateUtils.addHours(oldDate, 3);
(原始对象未更改)
DateUtils.addHours(oldDate, -1);
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类。那些老班子出了名的麻烦。避免他们。
使用toInstant
新添加到java.util.Date 的方法将旧类型转换为新的java.time类型。An Instant
是UTC时间线上的时刻,分辨率为纳秒。
Instant instant = myUtilDate.toInstant();
您可以Instant
通过传递TemporalAmount
诸如这样来增加时间Duration
。
Duration duration = Duration.ofHours( 8 );
Instant instantHourLater = instant.plus( duration );
要读取该日期时间,请通过调用生成标准ISO 8601格式的字符串toString
。
String output = instantHourLater.toString();
您可能希望通过某个区域的挂钟时间的镜头看到这一刻。Instant
通过创建,将调整为所需/期望的时区ZonedDateTime
。
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
via 转换Instant
。添加到旧类中的新方法促进了与java.time类型之间的转换。
java.util.Date date = java.util.Date.from( later.toInstant() );
有关转换的更多讨论,请参见我对问题的回答,将java.util.Date转换为“ java.time”类型?。
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
DateTime dt = new DateTime();
DateTime added = dt.plusHours(6);
ClassNotDefinedException
java.util.Date
按照请求者的要求获取对象ZonedDateTime.toInstant()
,Date.from()
如此处所述stackoverflow.com/a/32274725/5661065
使用新的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 oldDate = new Date(); // oldDate == current time
final long hoursInMillis = 60L * 60L * 1000L;
Date newDate = new Date(oldDate().getTime() +
(2L * hoursInMillis)); // Adds 2 hours
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8的Java 9.请参见类教程由Oracle。
当您的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
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);
如果您愿意使用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.
Duration.parse(iso8601duration)
很有意思,谢谢,但是您不能+
在上使用operator LocalDateTime
,您可能需要对其进行编辑。但是.plus(...)
确实有效。
Date
对象的,代表UTC中的特定时刻。您对的使用LocalDateTime
无法解决问题。LocalDateTime
缺少时区或从UTC偏移的任何概念,因此不能代表一个时刻。这个问题的课程错误。请参阅Instant和LocalDateTime有什么区别?
Date
对象已弃用。当涉及到时区时,这个问题是模棱两可的,所以我的回答是正确的。此外,你可以换出LocalDateTime
了ZonedDateTime
。
您可以使用Joda DateTime API进行操作
DateTime date= new DateTime(dateObj);
date = date.plusHours(1);
dateObj = date.toDate();
通过使用Java 8类。我们可以如下轻松地操作日期和时间。
LocalDateTime today = LocalDateTime.now();
LocalDateTime minusHours = today.minusHours(24);
LocalDateTime minusMinutes = minusHours.minusMinutes(30);
LocalDate localDate = LocalDate.from(minusMinutes);
Date
对象的,代表UTC中的特定时刻。您对的使用LocalDateTime
无法解决问题。LocalDateTime
缺少时区或从UTC偏移的任何概念,因此不能代表一个时刻。这个问题的课程错误。请参阅Instant和LocalDateTime有什么区别?
您可以使用Java 8中的LocalDateTime类。例如:
long n = 4;
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.plusHours(n));
Date
对象的,代表UTC中的特定时刻。您对的使用LocalDateTime
无法解决问题。LocalDateTime
缺少时区或从UTC偏移的任何概念,因此不能代表一个时刻。这个问题的课程错误。请参阅Instant和LocalDateTime有什么区别?
您可以使用此方法,很容易理解和实现:
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();
}