将1周添加到日期,哪种方式首选?

Dav*_*ton 25 java datetime calendar date

我正在审查工作中的一些代码,并且遇到了代码处理如何处理当前时间1周的不一致问题,并且想知道是否有任何理由为什么一个人应该优先于另一个:

第一个是实用方法:

public static Date addDaysToDate(final Date date, int noOfDays) {
    Date newDate = new Date(date.getTime());

    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(newDate);
    calendar.add(Calendar.DATE, noOfDays);
    newDate.setTime(calendar.getTime().getTime());

    return newDate;
}
Run Code Online (Sandbox Code Playgroud)

第二个使用简单的毫秒运算:

long theFuture = System.currentTimeMillis() + (86400 * 7 * 1000);
Date nextWeek = new Date(theFuture);
Run Code Online (Sandbox Code Playgroud)

第二种方法显然使用"幻数"来定义一周,但是这可以移动到一个常数.MILLISECONDS_IN_ONE_WEEK = 86400 * 7 * 1000 除此之外,是否有任何理由为什么这些方法中的一种应该优先于另一种呢?

基本上我想改变代码在整个过程中保持一致,但我不完全确定删除哪一个.所以任何论据都是有用的.

Eri*_*son 22

这两种方法在夏令时边界上的表现会有所不同.无论夏令时状态如何,第一种方法将在一天中的同一时间继续返回.第二种方法将返回在每个方向上变化一小时的时间,因为夏令时开始和停止.


PAA*_*PAA 7

下面可以在java 8 中完成,Java 8 很棒!!

public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        System.out.println("Current date: " + today);

        //add 1 week to the current date
        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("Next week: " + nextWeek);
    }
Run Code Online (Sandbox Code Playgroud)

  • 更短更简单的代码省略了具有相同效果的 `ChronoUnit`:`today.plusWeeks( 1 )` (3认同)