我的系统时间与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
链接
使用System.getCurrentTimeInMillis();
然后取一个日历实例并设置你的时间…