【问题标题】:Add X hours to a date & time将 X 小时添加到日期和时间
【发布时间】:2023-11-14 07:56:01
【问题描述】:

我目前正在获取时间和日期槽:

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

这将返回示例 '05/14/2014 01:10:00'

现在我正在努力做到这一点,这样我就可以在这个时间上增加一个小时,而不必担心新的一天或一个月等。

我将如何继续获得 '05/14/2014 01:10:00' 但 10 小时后以相同的格式?

提前致谢。

【问题讨论】:

标签: java date time calendar forward


【解决方案1】:

正如其他人所提到的,Calendar 类就是为此而设计的。

从 Java 8 开始,您也可以这样做:

DateTimeFormatter dateFormat =
    DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");

LocalDateTime date = LocalDateTime.now();
System.out.println(dateFormat.format(date));
System.out.println(dateFormat.format(date.plusHours(10)));

java.time.format.DateTimeFormatter 使用了很多与java.text.SimpleDateFormat 相同的模式字母,但它们并不完全相同。详情请见DateTimeFormatter javadoc

【讨论】:

  • 明确地说,Calendar 类现在被 java.time 类取代,特别是 DateTimeFormatter。不再有任何理由使用DateCalendarSimpleDateFormat 或与 Java 的最早版本捆绑在一起的任何其他麻烦的遗留日期时间类。仅使用 java.time.* 包中的类。
【解决方案2】:
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = new Date();
final long reqHoursInMillis = 1 * 60 * 60 * 1000;  // change 1 with required hour
Date newDate = new Date(currentDate.getTime() + reqHoursInMillis);
System.out.println(dateFormat.format(newDate));

这将以给定的日期格式在当前时间增加 1 小时。希望对您有所帮助。

【讨论】:

    【解决方案3】:

    查看日历对象: Calendar

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.HOUR_OF_DAY, 10);
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    System.out.println(dateFormat.format(cal.getTime()));
    

    【讨论】:

    【解决方案4】:
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Date date = new Date();
    System.out.println(dateFormat.format(date));
    
    /*
     * Add x hours to the time
     */
    
    int x = 10;
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    
    calendar.add(Calendar.HOUR, x);
    
    System.out.println(dateFormat.format(calendar.getTime()));
    

    控制台输出:

    05/08/2014 20:34:18
    05/09/2014 06:34:18
    

    【讨论】: