【发布时间】:2014-09-18 16:14:56
【问题描述】:
根据我的理解,我有以下测试应该通过。是我遗漏了什么还是日历中的错误?
Calendar inputC = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.US);
// Sunday
inputC.set(2014, Calendar.JUNE, 22, 0, 0, 0);
inputC.set(Calendar.MILLISECOND, 0);
// START code impl
// Given a date returns back the date with it's day being first day of week and resets time.
Calendar dc = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.US);
dc.set(inputC.get(Calendar.YEAR), inputC.get(Calendar.MONTH), inputC.get(Calendar.DAY_OF_MONTH), 0, 0 , 0);
dc.set(Calendar.MILLISECOND, 0);
// dc.getTimeInMillis();
// dc.set(Calendar.WEEK_OF_YEAR, inputC.get(Calendar.WEEK_OF_YEAR));
dc.set(Calendar.DAY_OF_WEEK, dc.getFirstDayOfWeek());
Date output = dc.getTime();
// END code impl
Calendar expectedSundayC = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.US);
expectedSundayC.set(2014, Calendar.JUNE, 22, 0, 0, 0);
expectedSundayC.set(Calendar.MILLISECOND, 0);
assertEquals(output, expectedSundayC.getTime());
输出: 2014-06-15T00:00:00Z
预计:2014-06-22T00:00:00Z
除非我取消注释以下两行之一,否则上述测试失败:
// dc.getTimeInMillis();
// dc.set(Calendar.WEEK_OF_YEAR, inputC.get(Calendar.WEEK_OF_YEAR));
为什么dc.getTimeInMillis() 会影响输出?
取消注释上面的第 2 行似乎是多余的,因为我已经设置了年、月、日、小时、分钟、秒、毫秒字段,这些字段应该是完整日期时间的足够数据。
【问题讨论】:
-
我觉得影响输出的是第二行,而不是
dc.getTimeInMillis()...您可以尝试将其设置为inputC.get(Calendar.WEEK_OF_YEAR) + 1? -
就像我说的,这两行中的任何一行都会影响输出。我只能取消注释
dc.getTimeInMillis()并且测试通过了。 -
星期几和星期的第一天不是一回事。
-
你为什么要设置
DAY_OF_WEEK? -
如果您阅读了被测试代码部分的注释,它说代码的范围是获取日期并将日期设置为一周的第一天。