在用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?
即 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?
楼主【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 %
敬礼!
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()));
}
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()));
}
}
输出结果正确,不知道你的代码是怎么写的
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()));