在以时区为输入的java中,如何在没有服务器时间的情况下获取正确的日期和时间
我的应用程序托管在伦敦的服务器上。我在美国的米纳索塔,所以时区是不同的 如何使用时区获取当前日期/时间。棘手的是,我不想根据服务器日期和时间获取当前日期和时间。是否有一种方法可以根据时区获取真实的当前日期和时间 下面的代码返回信息,但如果服务器日期无效,则响应也将是无效日期。但我想要真实的日期和时间。 我的输入将是时区。感谢您的帮助在以时区为输入的java中,如何在没有服务器时间的情况下获取正确的日期和时间,java,timezone,Java,Timezone,我的应用程序托管在伦敦的服务器上。我在美国的米纳索塔,所以时区是不同的 如何使用时区获取当前日期/时间。棘手的是,我不想根据服务器日期和时间获取当前日期和时间。是否有一种方法可以根据时区获取真实的当前日期和时间 下面的代码返回信息,但如果服务器日期无效,则响应也将是无效日期。但我想要真实的日期和时间。 我的输入将是时区。感谢您的帮助 Date date = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd H
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Use Minasota's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("America/Minasota"));
System.out.println("Date and time in Minasota: " + df.format(date));
必须知道,在Java8中不推荐使用三个字母的时区缩写。所以,不要期望他们永远得到支持。以下是使用java 8时间api实现此目的的两个等效示例:
System.out.println(Instant.now().atZone(ZoneId.of("CST",ZoneId.SHORT_IDS)));
System.out.println(Instant.now().atZone(ZoneId.of("America/Chicago")));
这个问题可能与重复。重要的是要知道,在Java8中不推荐使用三个字母的时区缩写。所以,不要期望他们永远得到支持。以下是使用java 8时间api实现此目的的两个等效示例:
System.out.println(Instant.now().atZone(ZoneId.of("CST",ZoneId.SHORT_IDS)));
System.out.println(Instant.now().atZone(ZoneId.of("America/Chicago")));
这个问题可能是tl的重复;博士
是否有一种方法可以根据时区获取真实的当前日期和时间
对。使用现代java.time而不是糟糕的遗留类
ZonedDateTime.now( // Represent a moment as seen through the wall-clock time used by the people of a particular region (a time zone).
ZoneId.of( "America/Chicago" ) // Specify time zone by proper `Continent/Region` name, *never* 2-4 letter pseudo-zones such as “CST”.
) // Returns a `ZonedDateTime` object.
.toString() // Generate text in standard ISO 8601 format wisely extended to append the name of the time zone in square brackets.
2018-11-07T14:38:24.723394-06:00[美国/芝加哥]
细节
我的应用程序托管在伦敦的服务器上。我在美国米纳索塔
这应该与你的应用无关
- 服务器应默认为UTC时区(通常)
- 应要求客户确认其所需/预期时区(关键时)李>
- 始终通过传递可选参数来显式指定所需/预期时区,而不是隐式依赖JVM的当前默认时间,该时间在运行时的任何时刻都可能更改(!)李>
Instant instant = Instant.now() ; // Current moment in UTC.
你可以通过一个墙上的时钟的镜头看到同一时刻,一个特定地区,一个时区的人们使用的时间
这是美国/芝加哥
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用2-4个字母的缩写,例如CST
或EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)
作为快捷方式,您可以跳过即时
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
但是我想要真实的日期和时间
➥ 以下是掌握日期和时间工作的核心概念:上面看到的即时时间
(UTC)和分区日期时间
(某些时区)代表了非常相同的时刻。这两个对象表示时间线上的同一点。它们都是“真实的日期和时间”。他们使用两个不同的挂钟时间来显示同一时刻
如果一个冰岛人和明尼阿波利斯的人通电话,他们都在墙上查各自的时钟和日历,大声说出当前的日期和时间,哪一个是正确的?两者都是正确的,用两种方式来表达相同的同时时刻
事实上,您最好将UTC视为唯一的真实时间™, 所有分区时间都只是变化。专注于你自己的狭隘时区,然后来回翻译,会让你发疯。关注UTC,仅当用户预期或业务逻辑需要时才调整到时区
这在堆栈溢出上已经被多次讨论过了。因此,请搜索更多信息和示例。并学会在发布前搜索堆栈溢出
要生成字符串,请为标准ISO 8601格式的文本调用toString
,或使用DateTimeFormatter.ofLocalized…
自动本地化,或使用DateTimeFormatter.ofPattern
指定自定义格式模式。这已经在堆栈溢出上被多次讨论过了,所以请搜索更多信息
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(tl;dr
是否有一种方法可以根据时区获取真实的当前日期和时间
是的。使用现代java.time而不是糟糕的遗留类
2018-11-07T14:38:24.723394-06:00[美国/芝加哥] 细节 我的应用程序托管在伦敦的服务器上。我在美国米纳索塔 这应该与你的应用无关ZonedDateTime.now( // Represent a moment as seen through the wall-clock time used by the people of a particular region (a time zone). ZoneId.of( "America/Chicago" ) // Specify time zone by proper `Continent/Region` name, *never* 2-4 letter pseudo-zones such as “CST”. ) // Returns a `ZonedDateTime` object. .toString() // Generate text in standard ISO 8601 format wisely extended to append the name of the time zone in square brackets.
- 服务器应默认为UTC时区(通常)
- 应要求客户确认其所需/预期时区(关键时)
- 始终通过传递可选参数来显式指定所需/预期时区,而不是隐式依赖JVM的当前默认时间,该时间在运行时的任何时刻都可能更改(!)