Force Java timezone as GMT/UTC(强制 Java 时区为 GMT/UTC)
问题描述
无论机器上设置的时区如何,我都需要将任何与时间相关的操作强制为 GMT/UTC.在代码中有什么方便的方法吗?
I need to force any time related operations to GMT/UTC, regardless the timezone set on the machine. Any convenient way to so in code?
为了澄清,我使用数据库服务器时间进行所有操作,但它根据本地时区格式化.
To clarify, I'm using the DB server time for all operations, but it comes out formatted according to local timezone.
谢谢!
推荐答案
OP 回答了这个问题以更改正在运行的 JVM 的单个实例的默认时区,设置 user.timezone
系统属性:
The OP answered this question to change the default timezone for a single instance of a running JVM, set the user.timezone
system property:
java -Duser.timezone=GMT ... <main-class>
如果在从数据库 ResultSet
检索 Date/Time/Timestamp 对象时需要设置特定的时区,请使用 getXXX
方法的第二种形式,该方法采用 日历
对象:
If you need to set specific time zones when retrieving Date/Time/Timestamp objects from a database ResultSet
, use the second form of the getXXX
methods that takes a Calendar
object:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
或者,在 PreparedStatement 中设置日期:
Or, setting the date in a PreparedStatement:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
这些将确保在数据库列不保留时区信息时,存储在数据库中的值是一致的.
These will ensure that the value stored in the database is consistent when the database column does not keep timezone information.
java.util.Date
和 java.sql.Date
类以 UTC 格式存储实际时间(毫秒).要在输出到另一个时区时将它们格式化,请使用 SimpleDateFormat
.您还可以使用 Calendar 对象将时区与值关联:
The java.util.Date
and java.sql.Date
classes store the actual time (milliseconds) in UTC. To format these on output to another timezone, use SimpleDateFormat
. You can also associate a timezone with the value using a Calendar object:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);
实用参考
https://docs.oracle.com/javase/9/troubleshoot/time-zone-settings-jre.htm#JSTGD377
https://confluence.atlassian.com/kb/setting-the-timezone-for-the-java-environment-841187402.html
这篇关于强制 Java 时区为 GMT/UTC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:强制 Java 时区为 GMT/UTC
基础教程推荐
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01