如何计算下周?

Ask*_*kar 10 java time

我想精确计算从给定日期开始一周的时间,但我得到的输出提前一小时.

码:

long DURATION = 7 * 24 * 60 * 60 * 1000;
System.out.println("    now: " + new Date(System.currentTimeMillis()));
System.out.println("next week: " + new Date(System.currentTimeMillis() + DURATION));
Run Code Online (Sandbox Code Playgroud)

输出:

now: Wed Sep 16 09:52:36 IRDT 2015
next week: Wed Sep 23 08:52:36 IRST 2015
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确计算出来?

Mad*_*mer 13

从来没有,依赖于毫秒算术,有太多的规则和陷阱使其具有任何价值(即使在很短的时间内),而是使用专用库,如Java 8的Time API,JodaTime甚至 Calendar

Java 8

LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.plusDays(7);

System.out.println(now);
System.out.println(then);
Run Code Online (Sandbox Code Playgroud)

哪个输出

2015-09-16T15:34:14.771
2015-09-23T15:34:14.771
Run Code Online (Sandbox Code Playgroud)

JodaTime

LocalDateTime now = LocalDateTime.now();
LocalDateTime then = now.plusDays(7);

System.out.println(now);
System.out.println(then);
Run Code Online (Sandbox Code Playgroud)

哪个输出

2015-09-16T15:35:19.954
2015-09-23T15:35:19.954
Run Code Online (Sandbox Code Playgroud)

日历

当你不能使用Java 8或JodaTime时

Calendar cal = Calendar.getInstance();
Date now = cal.getTime();
cal.add(Calendar.DATE, 7);
Date then = cal.getTime();

System.out.println(now);
System.out.println(then);
Run Code Online (Sandbox Code Playgroud)

哪个输出

Wed Sep 16 15:36:39 EST 2015
Wed Sep 23 15:36:39 EST 2015
Run Code Online (Sandbox Code Playgroud)

nb:你似乎遇到的"问题"根本不是问题,而只是在这个时期,你的时区似乎进入/退出了一天的节省时间,所以Date显示时间,这是正确的偏移


Siv*_*mar 1

尝试这个

Calendar cal = Calendar.getInstance();

System.out.println(cal.getTime());

cal.add(Calendar.DAY_OF_MONTH, 7);

System.out.println(cal.getTime());
Run Code Online (Sandbox Code Playgroud)