代码如下:
String newtime = "Tue Mar 08 09:27:28 +0000 2011";
SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd H:mm:ss Z yyyy", Locale.US);
Date sdate = df.parse(newtime);
System.out.println("" + sdate);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss",Locale.US);
System.out.println(formatter.format(sdate));执行结果如下:
Tue Mar 08 17:27:28 CST 2011
2011-03-08 05:27:28疑问:
小时是09,为什么格式化后变成17和05了呢?不太明白,请高手解答。
String newtime = "Tue Mar 08 09:27:28 +0000 2011";
SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd H:mm:ss Z yyyy", Locale.US);
Date sdate = df.parse(newtime);
System.out.println("" + sdate);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss",Locale.US);
System.out.println(formatter.format(sdate));执行结果如下:
Tue Mar 08 17:27:28 CST 2011
2011-03-08 05:27:28疑问:
小时是09,为什么格式化后变成17和05了呢?不太明白,请高手解答。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss",Locale.US);
改成:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.US);
执行结果是:
Tue Mar 08 17:27:28 CST 2011
2011-03-08 17:27:28
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
小时是09格式化之后变成了下午5点,是因为时区不一样造成的。
一个显示17点,一个显示5点,是因为H与h代表不同的意义。
H是表示24小时制。
h是表示12小时制。
System.out.println(formatter2.format(sdate));2011-03-08 05:27:28 +0800和 +0000 差了 8 = 17 - 9
GMT时间为:28 Aug 2009 01:37:46 GMT,也就是说GMT时间加上 8 个小时等于CST表示的时间, 那这个
CST不就是北京时间么,因为我们是在东八区的。
一切看起来很正常,不过在客户端用JavaScript解析这个时间就有问题了:
// Fri Aug 28 2009 23:37:46 GMT+0800
new Date('Fri Aug 28 09:37:46 CST 2009').toString();
好奇怪,这次GMT和CST表示的时间居然相差整整 14 个小时?
百度一下
找到这篇文章,问题已经很明了。
GMT(Greenwich Mean Time)代表格林尼治标准时间,这个大家都知道。
而CST却同时可以代表如下 4 个不同的时区:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
前面提到的通过 Java 获取的CST时间用的是China Standard Time,而客户端JavaScript则默认采用的是美国
的中部时间。
所以将 Fri Aug 28 09:37:46 CST 2009 加上 6 个小时,再加上 8 个小时,就等于 Fri Aug 28 2009 23:37:46
GMT+0800
可见,在以后的编程中为了避免错误,还是不要使用CST时间,而尽量采用GMT时间。
get_double = (double)(Math.round(result_value*100)/100.0)
二:
DecimalFormat df = new DecimalFormat('#.##');
get_double = Double.ParseDouble(df.format(result_value));
三:
get_double = Double.ParseDouble(String.format('%.2f',result_value));
四:
BigDecimal bd = new BigDecimalresult_value();
BigDecimal bd2 = bd.setScale(2,BigDecimal .ROUND_HALF_UP);
get_double = Double.ParseDouble(bd2.ToString());