为了账号安全,请及时绑定邮箱和手机立即绑定

使用相同参数的不同调用与 LocalDateTime 的不同结果

使用相同参数的不同调用与 LocalDateTime 的不同结果

呼如林 2022-05-12 18:44:12
问题是,我必须将代码从 Calendar 对象更改为 LocalDateTime 对象。但我最后没有得到相同的时间戳。在第一次调用中,我得到了与 localDateTime 相同的结果,在接下来的调用中,我得到了其他时间戳,并且我使用相同的参数来计算时间戳。我不知道为什么我会得到不同的结果。这对我来说不合逻辑。我想做的是:我得到一个UTC时间戳。我想将它设置在德国(欧洲/柏林)时间(对于夏季和冬季很重要)。然后我想计算一天的开始(00:00)和一天的结束(23:59)。然后我想得到这个时间的时间戳。我用 spring-boot 构建了一个 API。上述函数由 spring-boot 中的控制器类调用。API 启动后的第一次调用计算预期结果。但是所有下一个调用都会给出其他结果。始终有 7200 的差异。我尝试了使用 localDateTime 的其他方法,但它从未给出与日历相同的时间戳。本地日期时间方式:LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());LocalDateTime dayStartLocal = localDateTime.withHour(0)    .withMinute(0)    .withSecond(0)    .withNano(0);ZonedDateTime startZonedDateTime = dayStartLocal.atZone(ZoneId.systemDefault());long dayStartTimeStamp = startZonedDateTime.toInstant().getEpochSecond();LocalDateTime dayEndLocal = localDateTime.withHour(23)    .withMinute(59)    .withSecond(59)    .withNano(999);ZonedDateTime endZonedDateTime = dayEndLocal.atZone(ZoneId.systemDefault());long dayEndTimeStamp = endZonedDateTime.toInstant().getEpochSecond();日历方式:Calendar cal=Calendar.getInstance();cal.setTimeInMillis(timestamp*1000);cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));cal.set(Calendar.HOUR_OF_DAY,0);cal.set(Calendar.MINUTE,0);cal.set(Calendar.SECOND,0);cal.set(Calendar.MILLISECOND,0);long dayStartTimeStamp = calendar.getTimeInMillis()/1000L;cal.set(Calendar.HOUR_OF_DAY,23);cal.set(Calendar.MINUTE,59);cal.set(Calendar.SECOND,59);cal.set(Calendar.MILLISECOND,999);long dayEndTimeStamp = calendar.getTimeInMillis()/1000L;我想要参数时间戳 1536933600。结果是 1536876000 和 1536962399。但是我在 localDateTime 方法的第一个请求之后得到了 1536883200 和 1536969599。
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您正在为代码使用系统默认区域,为java.time代码使用欧洲/柏林区域Calendar。这7200很可能是您的系统时区与欧洲/柏林(2 小时)之间的差异。


全部替换ZoneId.systemDefault()为ZoneId.of("Europe/Berlin"),您将在两个版本中获得相同的值:


timestamp = 1536933600

dayStartTimeStamp = 1536876000

dayEndTimeStamp = 1536962399


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号