代码如下:
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了呢?不太明白,请高手解答。

解决方案 »

  1.   

    如果把
    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
      

  2.   

    字母  日期或时间元素  表示  示例  
    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小时制。

      

  3.   

            SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss Z",Locale.US);
            System.out.println(formatter2.format(sdate));2011-03-08 05:27:28 +0800和 +0000 差了 8 = 17 - 9
      

  4.   

    转一个:今天遇到一个奇怪的问题,在服务器端通过 c# 获取当前时间为 Fri Aug 28 09:37:46 CST 2009, 转化为
    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时间。
      

  5.   

    在格式化输出的时候 ,设置TimeZone为"GMT0",输入就跟输入是同样的时间了。
      

  6.   

    说的不错,我前两天弄过double的格式化一:  
    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());