- 我的服务器有 GMT+7,所以如果我移动到另一个有另一个 GMT 时区的服务器,那么存储在 db 中的所有日期都会不正确?
- 是的 Q1 是正确的,我将在 GMT+0 时区存储日期并在每个成员选择的自定义 GMT 时区显示它怎么样
- 我如何在 java 中使用 GMT+0 获取日期
问问题
11177 次
5 回答
11
1)引用javadocs,Java毫秒时间戳是
当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。
因此,由于时间戳为 UTC/GMT,如果将其存储在数据库中,则无论服务器的时区如何,该日期都是正确的。
2)根据时区格式化时间戳以进行显示将是正确的方法。
3) 创建一个新的 java.util.Date 实例并调用 getTime() 将为您获取 Java 中 GMT+0 的时间戳。
于 2009-05-11T10:31:06.517 回答
2
补充一点,一旦有了 java.util.Date,就可以将其“转换”为任何时区(由用户选择)。这是 Groovy 中的代码示例(将在 Java 中使用轻微的 mods):
// This is a test to prove that in Java, you can create ONE java.util.Date
// and easily re-display it in different TimeZones
fmtStr = "MM/dd/yyyy hh:mm aa zzz"
myDate = new java.util.Date()
sdf = new java.text.SimpleDateFormat(fmtStr)
// Default TimeZone
println "Date formatted with default TimeZone: " + sdf.format(myDate)
// GMT
sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
println "Date formatted with GMT TimeZone: " + sdf.format(myDate)
// America/New_York
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"))
println "Date formatted with America/New_York TimeZone: " + sdf.format(myDate)
// PST
sdf.setTimeZone(TimeZone.getTimeZone("PST"))
println "Date formatted with PST TimeZone: " + sdf.format(myDate)
于 2009-09-29T14:04:46.957 回答
1
默认情况下,当您在 java 中获取当前时区的日期时,您可以使用TimeZone类来获取系统时间运行所在的时区。大多数数据库支持可以将日期与时区一起存储,这可能是正确的方法要做到这一点,但确切的格式可能取决于您使用的数据库。
于 2009-05-11T10:31:00.467 回答
0
我建议您仅将 Date 用作“持有者”,并建议您改用 Calendar 实例。要获取 GMT 时区的日历,只需使用以下命令:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00"))
当您使用时间和日期时,日历将提供很多好处。例如,为此添加一个小时很简单:
cal.add(Calendar.HOUR, 1);
最后,当你需要一个日期时,你只需使用这个:
Date date = cal.getTime();
于 2010-07-28T17:52:06.030 回答
0
对于 Q3,考虑使用 ZonedDateTime 类。
于 2016-09-07T08:59:23.257 回答