java timezone设置的问题

wodi1015 2008-07-25 01:20:44
在用java将一个字符串转换成一个date的时候, 转换出来的时间总是比字符串的时间要小2个小时

我查了一下是程序设置了一个timezone后就变成那样了

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]

我在大连 时间字符串是这样的20080726T100002, 出来以后变成Sat Jul 26 08:00:02 UTC 2008

很明显10点变8点了, 如果没用这个timezone就是Sat Jul 26 10:00:02 UTC 2008

我想问下大家, 根据timezone是怎样计算时间 导致了我这种情况

我知道这个UTC时间是这么定义的

本地挂钟时间 和 UTC时间,所谓的UTC时间就是指表示自从标准基准时间(称为“历元(epoch)”,
即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数,毫无疑问这个时间所有计算机都是一样的。
那么我们任务栏上的时间是怎么回事呢?那是OS会把计算机所在的当前时区加上,如:
中国在东八区,就会在UTC 时间上加上 8(小时)*60*60*1000作为本地挂钟时间(不考虑夏令时)。

是不是这样的呢 解析20080726T100002后的时间是Sat Jul 26 10:00:02 UTC 2008
然后再去检查我的时区 发现是上海时区,上海很可能早北京时区2个小时,这样就把我的时间换算
成上海时间就是Sat Jul 26 08:00:02 UTC 2008?
...全文
1579 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
junying2yu 2009-01-07
  • 打赏
  • 举报
回复
up up
hmsuccess 2008-07-25
  • 打赏
  • 举报
回复
关注,学习
爱摸鱼de老邪 2008-07-25
  • 打赏
  • 举报
回复
有这种可能。
xunyiren 2008-07-25
  • 打赏
  • 举报
回复
估计程序里是用东六区的TimeZone做了转换

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(Calendar.getInstance().getTime()));//北京时间,在时区划分上,属东八区(GMT+8:00)
sdf.setTimeZone(TimeZone.getTimeZone("GMT+6:00"));
System.out.println(sdf.format(Calendar.getInstance().getTime()));
wodi1015 2008-07-25
  • 打赏
  • 举报
回复
我国幅员辽阔,经度从东经72度到135度,按国际时区划分,我国横跨五个时区,也就是东五区、东六区、东七区、东八区和东九区。

我国采用东经120度的地方时,即东八区的标准时为全国统一的标准时间。由于首都北京在东八区内,所以这个标准就称为“北京时间”。

只有新疆实行东六区的当地时间,新疆与北京时差2小时,比北京慢2小时。
wodi1015 2008-07-25
  • 打赏
  • 举报
回复
如果在其他国家的角度看 上海北京不是一个时区 中国好像跨过5个时区呢
binxigogo 2008-07-25
  • 打赏
  • 举报
回复
把SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");改为SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
输出结果正确,不知道你的代码是怎么写的
binxigogo 2008-07-25
  • 打赏
  • 举报
回复

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;

public class Test1 {
public static void main(String [] args) {
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz,Locale.getDefault());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(c.getTime()));
}
}
binxigogo 2008-07-25
  • 打赏
  • 举报
回复

public static void main(String [] args) {
TimeZone tz = TimeZone.getDefault();
Calendar c = Calendar.getInstance(tz,Locale.getDefault());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(c.getTime()));
}
ldy214 2008-07-25
  • 打赏
  • 举报
回复
timezone是什么!
lovingprince 2008-07-25
  • 打赏
  • 举报
回复
时区不同,这里就有一个时差问题了。不同的时区有不同的时差,所以时间会不一样。
爱摸鱼de老邪 2008-07-25
  • 打赏
  • 举报
回复
北京上海是一个1个时区,贴下你的代码吧。
sagezk 2008-07-25
  • 打赏
  • 举报
回复
你是怎么转换的?

62,635

社区成员

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

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