1. 我的服务器格林尼治标准时间+7,因此,如果我搬到另一个服务器有另一个GMT时区,所有的日期储存在db将不正确的?
  2. 是的Q1是正确的,怎么样,我将存储日在格林尼治标准时间0时区,并显示它在定义GMT时区选择每个成员
  3. 我怎么得到的日期与格林尼治标准时间+0in java
有帮助吗?

解决方案

1)引述javadocs、Java毫秒的时间戳

差异,测量在毫秒之间,目前的时间和午夜,月1日,1970年UTC。

因此,随着时间戳是UTC/GMT,如果你把它储存在该数据库,这个日期将是正确的无论何时区服务器。

2)格式的时间戳显示根据不同的时区,将是正确的做法。

3)创建一个新的java。工具.日期实例,并呼吁getTime()将得到您的时间戳GMT+0。

其他提示

添加标记的一点是,一旦你有一个java。工具.日期,可以"转换为"任何时区(作为选择的用户)。这里有一个代码样本在常规(将在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)

通过默认当你得到一个日期在java其在当前的时区,可以使用 时区 类得到的时区系统的时间运行。大多数数据库支持这一日期可以存储的时区,这可能会正确的方式做到这一点,但究竟什么样的格式是可以依赖于其数据库的使用。

我建议您使用的日期只有作为"持有人",并建议您使用的日历情况而不是。得到一个日历在格林尼治标准时间的区域只是利用这样的:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00"))

一个日历将提供一个极大的好处时,你的工作时间和日期。例如,添加一个小时,这是简单的:

cal.add(Calendar.HOUR, 1);

最后,当你需要一个日期只是用这个:

Date date = cal.getTime();

Q3,考虑使用ZonedDateTime类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top