当前位置: 首页 > 知识库问答 >
问题:

Java时间:LocalTime(UTC)到ZonedTime(-05:00)不显示正确的小时

蒲功
2023-03-14

我不熟悉使用Java的内置时间API。我正在尝试获取UTC的当前时间,我希望能够将其转换为运行程序的任何人的时区。现在我有以下代码:

Clock clock = Clock.systemUTC();
LocalDateTime time = LocalDateTime.now(clock);
ZonedDateTime zonedTime = time.atZone(ZoneId.systemDefault());
System.out.println("UTC time: " + time + " Local: " + zonedTime);

但是,这打印出来:

UTC time: 2022-06-01T15:25:57.933673600 Local: 2022-06-01T15:25:57.9336736-05:00

它似乎正在获取正确的时区,但没有将其应用于输出。所以如果我打印

time.getHour()
zonedTime.getHour()

他们都打印出“15”正确的方法是什么,让它给出应用时区偏移的时间?UTC时间是15,但我的当地时间是10。我希望能够将UTC转换为时区时间。

原因是我正在设置保存文件,所以我想记录文件保存时的UTC时间,但当用户在计算机上检查保存日期时,可以在时区中显示时间。

谢谢你抽出时间!!

编辑:对于那些将来可能遇到的人,这里是相同的代码,并应用了所选答案中的修复:

Instant time = Instant.now();
ZonedDateTime zonedTime = time.atZone(ZoneId.systemDefault());
System.out.println("UTC time: " + time + " Local: " + zonedTime.toOffsetDateTime());

共有1个答案

宗安宁
2023-03-14

问题是您对LocalDateTime的使用。它不知道它位于哪个时区,所以当您使用LocalDateTime时。atZone假定您希望保持相同的本地日期/时间。

这里最好的修复方法是将LocalDateTime.now(时钟)更改为Instant.now(时钟)。您感兴趣的是“当前时间即时”,而不是“UTC中的本地时间”。

或者,在系统时区中使用带ZonedDateTime的时钟。现在(时钟)。

 类似资料:
  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 当我从文件导入字体时,它显示得很奇怪。它应该说“测试”,但它只是说“_”。 这是我的代码:

  • 我正在使用Java-Eclipse和oracle SGBD public DefaultTableModel getJoueurData(){

  • 有人能告诉我代码有什么问题吗?它只显示第一行和表头information.thks

  • 我正在尝试使用一个名为'jQuery.InstagramFeed'的库,它允许我在不使用访问令牌的情况下显示用户feed中的图像。所以,我一直在尝试使用它,但是,出于某种原因,它并没有向我展示任何东西。 我已经研究了几个星期了,我已经尝试了在这里的很多帖子(以及其他论坛)中提出的很多解决方案,比如下面这些: TypeError:$不是函数调用jQuery函数 “未捕获的TypeError:$不是函

  • 我在Win 7下运行的是Ant 1.8.1。而我的Java版本是1.7_17。 我在我的构建文件中添加了以下2行用于诊断。 而结果就是 知道发生了什么吗? 蚂蚁1.8.1中的硬编码是它能显示的最高java版本是1.6吗?