JAVA日期格式化相差8小时的BUG

[url=http://www.hpgy.net/blog/12345679]个人博客:[/url][url]http://www.hpgy.net/blog/12345679/6/276_1.html[/url]

今天在用JAVA的SimpleDateFormat类对日期进行格式化的时候,发现格式化出来的时间总比预期的时间相差8小时,估计是时区的问题,后来在网上搜了一下,解决办法大概有两种:一种是替换JDK的相关包文件(这里不介绍,可以自己到网上搜),另一种是通过代码来解决。

我这里介绍的是编码解决方案,主要是在格式化前设置时区。这分两种情况,如果是想把字符串格式的日期格式化成日期类型,代码如下:

public static Date getDate(String date, String format) {
Date result = null;
SimpleDateFormat fmt = new SimpleDateFormat(format);
TimeZone.setDefault(TimeZone.getTimeZone("GMT")); //设置时区
try {
result = fmt.parse(date);
System.out.println("result:" + result);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}

红色字体为设置时区的代码,加上这行就OK了。另一种情况是恰恰相反,是想把日前类型格式化成字符串,代码如下:

public static String getString(Date date, String format) {
if (null == date) return "";
SimpleDateFormat fmt = new SimpleDateFormat(format);
fmt.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); //设置时区
return fmt.format(date); // 按自定义格式,格式化当前时间。
}

代码很简单,大家一看就明白,就不多做解释。此外,对格式化的格式串"yyyy-MM-dd HH:mm:ss"作个简单说明,其中格式串前一部分是针对年月日,要注意的是其中月份MM需要大写,后面一部分针对时分秒,其中小时HH大小写含义不同,大写表示采用24小时制,小写则表示采用12小时制计时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值