【发布时间】:2021-02-03 14:14:53
【问题描述】:
我有一个函数可以将时间以毫秒为单位转换为 LocalDate 对象:
def convertToLocalDateTimeViaInstant(dateToConvert: java.util.Date): java.time.LocalDate =
dateToConvert.toInstant.atZone(ZoneId.systemDefault).toLocalDate
我对此函数进行了单元测试,如下所示:
"convertToLocalDateTimeViaInstant" should {
"return the correct LocalDate instance" in new SAMLServiceTestEnv() {
val timeInMillis: Long = 1349333576093L // Date is Thu Oct 04 2012 06:52:56 UTC in millis
val someDate = new Date(timeInMillis)
val resultDate: LocalDate = samlServiceImpl.convertToLocalDateTimeViaInstant(someDate)
resultDate.getYear mustEqual 2012
resultDate.getMonth mustEqual java.time.Month.OCTOBER
resultDate.getDayOfMonth mustEqual 4
}
}
当我单独运行这个测试或整个文件时,这个测试会做出正确的断言。值1349333576093L 对应于Thu Oct 04 2012 06:52:56 UTC 和Wed Oct 03 2012 23:52:56 PST(旧金山时间)。
但是,当我在项目中运行所有单元测试时,我发现此测试失败。 resultDate.getDayOfMonth mustEqual 4 断言未能声明 4 is not equal to 3。我很惊讶地看到这一点,因为该函数在单独运行时清楚地考虑了 UTC 时间,但在一起运行时以某种方式观察了本地时间?我在这里做错了什么?
【问题讨论】: