【发布时间】:2021-09-19 19:57:30
【问题描述】:
我需要在美国中部标准时间 00:00:00 采用以下格式的当前日期。
比如说当前日期是 2021 年 7 月 9 日,那么我需要该日期以及 00:00:00 时间。
预期输出:
Fri Jul 09 00:00:00 CST 2021
当前代码:
LocalDateTime date= LocalDateTime.now().with(LocalTime.MIN);
Date dayStart= Date.from(date.atZone(ZoneId.systemDefault()).toInstant());
CurrentCode 的输出: Fri Jul 09 00:00:00 UTC 2021
当前代码选择服务器时间/GMT,比 CST 早 5 小时。
示例: 09AM GMT is 14 CST/2PM CST
我已尝试将日历设置为 00:00:00,并将 setTimeZone 设置为 America/New_York。但是,当我将输出作为 calendar.getTime() 返回时,请给出其他时间而不是 CST 00:00:00。
试过了: @scheduled(zone="America/New_york" ) -- 不工作。
【问题讨论】:
-
您将旧的/过时的 API 与现代的 API 混合在一起有什么特别的原因吗?您通过
java.time.LocalDateTime.now()获取当前日期和时间(没有明确考虑时区),但使用旧的兼容性方法最终获得java.util.Date。 -
它应该可以工作。我在本地机器上运行了这段代码,它运行良好。 ideone.com/3jVfUh。如果您在本地机器上运行,您可以通过更改您的机器时区来验证这一点。
-
实际上它选择的服务器时间是 UTC/GMT。我需要将该 GMT 转换为 CST。当地时间它会工作。部署代码时它不起作用。
-
在增强部分工作。这就是为什么有一个旧代码。存储库仅选择 00:00:00 作为 Date 对象。这就是日期结束的原因
-
America/New_york 不是 CST。 systemDefault 不是 CST。您在不使用区域/偏移信息的情况下组合了两个不同的时间 api。这里有很多东西要检查。您可以先将您的 ZoneId 设置为
America/Chicago(现在是 CDT),然后执行与您完全相同的操作吗?
标签: java date cron scheduler zone