我在Windows机器上使用Java 7。我正在开发一个运行在Tomcat上的web应用程序。
我需要知道服务器的时区。以下是我为此所做的:
TimeZone.getDefault ();
这是正确的方式吗?
感谢您的输入!
问候。
br
TimeZone.getDefault()
这是正确的方式吗?
不,那个类现在是遗留的,被ZoneId
取代了。
ZoneId.systemDefault()
但是最好指定您想要的/期望的区域,而不是依赖于JVM当前的默认值。
<标题> java.time h1> ava。time类(ZoneId
, ZoneOffset
和ZoneRules
)而不是麻烦的旧的遗留日期-时间类(TimeZone
)。当前默认
您可以询问JVM当前的默认时区。
ZoneId z = ZoneId.systemDefault() ;
但是无论你的目的是什么,都可能是不明智的。首先,服务器的最佳实践是将主机操作系统和JVM的默认时区设置为UTC。其次,永远不要依赖服务器的时区。这个设置是程序员无法控制的,并且很容易被更改为意想不到的值。在JVM中,该JVM中任何应用程序的任何线程中的任何代码都可能在运行时期间更改当前默认时区。
指定区域最好总是通过向各种java传递可选参数来指定您想要的/期望的时区。时间方法。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "Africa/Tunis" ) ) ;
请指定合适的时区名称,格式为continent/region
,如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。不要使用3-4个字母的缩写,如EST
或IST
,因为它们是而不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
顺便说一下,Locale
也是如此——总是显式地指定,而不是隐式地依赖于当前的默认值。
<标题>对 java.time
java。time框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date
, Calendar
, &SimpleDateFormat
.
Joda-Time项目,现在处于维护模式,建议迁移到java。时间类。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。
可以交换java。Time 直接与数据库关联。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*
类。
从哪里获取java。时间类?
- Java SE 8, Java SE 9,以及更高版本
- 内置。
- 标准Java API的一部分,捆绑实现。
Java 9增加了一些小的特性和修复。
- 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport 。
- Android版本的java bundle实现。时间类。
- 对于早期的Android, ThreeTenABP项目适应ThreeTen-Backport(如上所述)。参见如何使用ThreeTenABP…。
Interval
、YearWeek
、YearQuarter
等。
标题>标题>