bruce说我的那个得到GMT时间
代码是错误的,和他讨论了很长时间,后来发现果然是我的理论方面有问题,就java.util.Date类的定义而言,它本来就是当前的GMT时间相对于
1970年1月1日的GMT时间的long值,但是如果使用System.out.println()等方法打印出其内容的时候,也就是使用
Date.toString方法的时候,我们看到的是经过时区修正的结果,这个看看java.util.Date的实现就可以知道:

  • public String toString() {
  • DateFormat formatter = null;
  • if (simpleFormatter != null) {
  • formatter = (DateFormat)simpleFormatter.get();
  • }
  • if (formatter == null) {
  • /* No cache yet, or cached formatter GC'd */
  • formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",
  • Locale.US);
  • simpleFormatter = new SoftReference(formatter);
  • }
  • synchronized (formatter) {
  • formatter.setTimeZone(TimeZone.getDefault());
  • return formatter.format(this);
  • }
  • }
  • 从代码我们可以看到是使用时区格式化的结果(JDK5的代码和这个不同)。
    问题是:当我们将这个GMT的Date值转换到java.sql.Date或者java.sql.Timestamp存到数据库里面以后,数据库里面的值
    是我们的本地时间而不是GMT时间,因此,如果你需要数据库存储GMT时间的时候,还是需要使用我的那个方法进行转换。至于为什么要存储GMT时间,这个
    是有跨时区应用的时候要考虑的问题,例如一个系统中国的用户和美国的用户同时使用,否则时间会很混乱。

    (Visited 163 times, 1 visits today)