java Date Calendar 疑惑

sling2007 2009-07-17 09:14:59
import java.util.*;
public class Test{
public static void main(String[] args){
TimeZone tz2=TimeZone.getTimeZone("GMT");
Calendar c11 = Calendar.getInstance(tz2);
Date d11=c11.getTime();
System.out.println(new Date());//打印当前时区的时间
System.out.println(d11);//打印GMT时间
System.out.println(d11.getHours());//GMT的小时
System.out.println(c11.get(Calendar.HOUR_OF_DAY));//GMT的小时
}
}

上面的代码输出如下: 那些注释只是我的理解,
Fri Jul 17 21:08:01 CST 2009
Fri Jul 17 21:08:01 CST 2009
21
13
我预想的输出应该是
第一行是当前时区的时间:Fri Jul 17 21:08:01 CST 2009
第二行是格林威治时间:........
第三行是当前时区的小时:21
第四行是格林威治的小时:13
为什么第二行打印出当前时区的时间?
而第四行却可以打印格林威治的小时?
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yztommyhc 2009-07-18
  • 打赏
  • 举报
回复
Calendar的getTime()方法,楼主可以看看java的源代码是怎么写的。

3楼说应该是对的,Date是没有时区信息的。
sheriguan 2009-07-18
  • 打赏
  • 举报
回复
Date d11=c11.getTime();
你的这一句已经获得了当前系统的时间
andycpp 2009-07-18
  • 打赏
  • 举报
回复
我个人理解,Date类本身是非常简单的,他仅仅包含了标准的时间信息(既以格林威治标准时间为基础),不包含任何本地化时区信息。

System.out.println(d11);//打印GMT时间
这句话之所以没有满足你的需求,就是上述原因,尽管你的Calendar类设置了时区,但是Date类是没有时区信息的,它必须以格林威治标准时间来表示,然后在输出打印的时候调用本地时区

而Calendar类中设置的时区信息,只对它自己的方法有效,
因此System.out.println(c11.get(Calendar.HOUR_OF_DAY));//GMT的小时
的结果是正确的。

要想按照指定的时区输出日期信息,应该是在DateFormat类中指定时区,来格式化日期,就像这样:
		SimpleDateFormat format = new SimpleDateFormat();
format.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(format.format(new Date()));
sling2007 2009-07-18
  • 打赏
  • 举报
回复
?

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧