在用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?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【wodi1015】截止到2008-07-25 13:20:52的历史汇总数据(不包括此帖):
    发帖的总数量:58                       发帖的总分数:2390                     每贴平均分数:41                       
    回帖的总数量:51                       得分贴总数量:3                        回帖的得分率:5%                       
    结贴的总数量:58                       结贴的总分数:2390                     
    无满意结贴数:9                        无满意结贴分:370                      
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:15.52 %               无满意结分率:15.48 %                  
    敬礼!
      

  2.   


    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()));
    }
      

  3.   


    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()));
    }
    }
      

  4.   

    把SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");改为SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    输出结果正确,不知道你的代码是怎么写的
      

  5.   

    估计程序里是用东六区的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()));