答案 0 :(得分:11)
1)引用javadocs,Java毫秒时间戳是
当前时间与1970年1月1日午夜时间之间的差异,以毫秒为单位。
因此,由于时间戳是UTC / GMT,如果将其存储在数据库中,则无论服务器的时区如何,此日期都是正确的。
2)根据时区格式化显示的时间戳将是正确的方法。
3)创建一个新的java.util.Date实例并调用getTime()将获得Java中GMT + 0的时间戳。
答案 1 :(得分:2)
要添加到标记点,一旦有了java.util.Date,就可以将其“转换”为任何时区(由用户选择)。这是Groovy中的代码示例(将在Java中使用轻微的mod):
// 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)
答案 2 :(得分:1)
默认情况下,当你在当前时区的java中获取日期时,可以使用TimeZone类来获取运行系统时间的时区。大多数数据库支持日期可以与时区一起存储,这可能是正确的方法,但格式究竟是什么取决于您使用的数据库。
答案 3 :(得分:0)
我建议您仅将Date用作“持有者”,并建议您使用Calendar实例。要在GMT时区中获取日历,只需使用:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00"))
当您处理时间和日期时,日历将提供很多好处。例如,添加一小时就很简单了:
cal.add(Calendar.HOUR, 1);
最后,当你需要一个日期时,你只需使用它:
Date date = cal.getTime();
答案 4 :(得分:0)
对于Q3,请考虑使用ZonedDateTime类。