如何设置java时区



我的系统时间与java的新Date()告诉(+ 4小时)不同,
所以我认为这是因为一些java设置。
如何使java时间始终与linux系统时间一致?
(通过编辑配置文件)

您可以在应用程序启动时使用TimeZone.setDefault(..),或者将时区作为命令行参数传递:-Duser.timezone=GMT

如果您想通过编程方式更改时区,那么您可以使用:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"))

我更喜欢这种方法,因为它不依赖于人们记住用正确的时区参数运行我的代码。

这段代码帮助了我。

TimeZone tzone = TimeZone.getTimeZone("Singapore");
// set time zone to default
tzone.setDefault(tzone);
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
Date myDate = calendar.getTime();
System.out.println(myDate);

这段代码打印的日期/时间正确吗?否则,还有其他问题

避免需要

使您的日期和时间代码独立于JVM的时区设置。这个设置是不可靠的,所以不管怎样,不使用它是最好的。

指定时区。

ZoneId z = ZoneId.of( "Asia/Japan" ) ;        // Or use `ZoneId.systemDefault()` for the JVM’s current default time zone. The JVM’s default may or may not match that of the host OS’ current default time zone.
ZonedDateTime zdt = ZonedDateTime.now( z ) ;  // Capture the current moment as seen in a particular time zone.

对于UTC(偏移量为0)。

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;

是的,我知道打印一个老式的java.util.Date并因此隐式地调用它的toString方法会导致它使用时区设置来呈现要打印的字符串。但是,您不应该再使用Date类。它的设计很糟糕。使用JVM时区并因此假装Date持有时区的令人困惑的特性只是其众多缺点之一。使用java。time,现代Java日期和时间API,用于您的日期和时间工作。

如果你无法避免需要

将Unix环境变量TZ设置为所需的时区ID。例如,这在我的Mac上为我工作:

export TZ=Etc/UTC
java -cp /Your/class/path your.package.YourMainClass

链接
Oracle tutorial: Date Time说明如何使用java.time

使用System.getCurrentTimeInMillis();

然后取一个日历实例并设置你的时间…

相关内容

  • 没有找到相关文章

最新更新