无论计算机上设置的时区如何,我都需要对GMT / UTC进行任何与时间相关的操作。在代码中有任何方便的方法吗?
为了明确起见,我将所有操作都使用数据库服务器时间,但是它是根据本地时区格式化的。
谢谢!
OP回答了这个问题,以更改正在运行的JVM的单个实例的默认时区,并设置user.timezone
系统属性:
java -Duser.timezone=GMT ... <main-class>
如果从数据库检索Date / Time /
Timestamp对象时需要设置特定的时区ResultSet
,请使用getXXX
采用Calendar
对象的方法的第二种形式:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
或者,在PreparedStatement中设置日期:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
当数据库列不保留时区信息时,这将确保数据库中存储的值一致。
在java.util.Date
和java.sql.Date
类存储在UTC的实际时间(毫秒)。要将它们格式化为另一个时区,请使用SimpleDateFormat
。您还可以使用Calendar对象将时区与值相关联:
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
问题内容: 我需要更改单个数据库的时区吗? 我知道我们可以在WHM中更改时区(我们正在使用hostgator的专用服务器),但是服务器上运行的大量旧版软件中有很多+6小时的编码(即服务器时区为CST,需要GMT时间,因此以前的开发人员会在代码中手动更改日期/时间- 很糟糕!)。 我现在正在开发一个新软件,并希望将其全部保存在GMT中,我知道我可以使用date_default_timezone_se
我有一个带时区的日期(如2014年3月21日08:00:00)(“如美国/丹佛”),我想将该日期转换为格林尼治标准时间;我怎么能这样做? 我还想知道Oracle是否接受DST?它会自动处理吗?是否以相同的方式支持所有时区? 注:“来自时区”在每种情况下都会改变;所以,并不总是美国/丹佛
与许多Web应用程序一样,我正在开发的应用程序需要为我们亲爱的最终用户转换时区。然而,当我在PHP 5.3中使用Carbon/DateTime时,我发现这很奇怪: 我将的时区设置为GMT 5,但是当我格式化时,它变成,而不是预期的。 同样,如果我将其设置为负数,即,则格式显示而不是预期的。 有人能开导吗? 我能够在PHP5.3.3、5.3.13、5.3.28中复制这个问题。认为这是一个PHP特定的
我正在尝试将pst时间戳转换为Java的gmt 我有一个时间戳为的字符串。我如何处理该字符串并将其转换为gmt时间戳? 我做了一些我想做的事,但还没去任何地方 结果是:
问题内容: 苹果使用Etc / GMT时区的原因是什么,当苹果从App Store返回收据以进行自动续订时,该理由是什么。 Etc / GMT时区到底是什么时间?Java SDK是否了解该时区?还是我必须使用其他第三方库(如Joda- Time) ? 问题答案: Etc / GMT 与UTC或GMT 并不 完全相同。仅当偏移量为0时,它们表示时间上的同一时刻。在所有其他情况下,它们是完全不同的。
问题内容: 我有一个GMT字段,用户在其中输入要转换为IST的时间(例如:小时字段18,分钟字段30,会话字段am / pm)。我需要获取这些输入并在Java中转换为IST ??? 问题答案: 如果您意识到时区仅与格式化为String的日期相关,则这是非常容易且显而易见的-秒/毫秒时间戳(仅是包装器)始终是隐式UTC(正确地称为GMT)。而且,在这种时间戳和字符串之间进行转换始终会同时使用时区。