在日期中添加 1 周,哪种方式是首选?

2022-09-01 19:12:05

我正在审查工作中的一些代码,并在代码处理方式上遇到不一致的情况,使当前时间增加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;
}

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

long theFuture = System.currentTimeMillis() + (86400 * 7 * 1000);
Date nextWeek = new Date(theFuture);

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

基本上,我想更改代码以使始终保持一致,但我不完全确定要删除哪一个。因此,任何以这种或那种方式进行论证都是有用的。


答案 1

这两种方法在夏令时边界上的行为将有所不同。第一种方法将继续返回一天中的同一时间,而不考虑夏令时状态。第二种方法将返回每个方向上变化一小时的时间,因为夏令时开始和停止。


答案 2

下面可以在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);
    }