zoukankan      html  css  js  c++  java
  • SimpleDateFormat解析的时区问题

    import java.text.ParseException;  
    import java.text.SimpleDateFormat;  
    import java.util.Date;  
    import java.util.Locale;  
    import java.util.Calendar;  
      
    public class Test{  
            public static void main(String[] args) throws ParseException{  
          
                    System.out.println(Calendar.getInstance().getTimeZone());  
                    System.out.println(Locale.getDefault());  
                    System.out.println("Today is :" + new Date());  
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z");  
                    System.out.println("2011-12-07 15:33:17.372 CST被解析成了" + dateFormat.parse("2011-12-07 15:33:17.372 CST"));  
                    System.out.println("2011-12-07 15:33:17.372 HKT被解析成了" + dateFormat.parse("2011-12-07 15:33:17.372 HKT"));  
            }  
      
    } 

    本地服务器A是香港时区(HKT),另一台服务器B是上海时区(CST),从B发给A的时间字符串为“2011-12-07 15:33:17.372 CST”,结果在A中被解析成了“Thu Dec 08 05:33:17 HKT 2011”

    原因是因为SimpleDateFormat在解析这个字符串时,将CST当做了美国中部时区,属于西6区,而香港和北京时区都是东8区,两者相差14个小时,于是就有了上面那个问题

    这可以通过将B服务器的时区修改为香港时区(HKT)来解决,在linux下面的命令是tzselect

    [customer@localhost ~]$ tzselect
    Please identify a location so that time zone rules can be set correctly.
    Please select a continent or ocean.
     1) Africa
     2) Americas
     3) Antarctica
     4) Arctic Ocean
     5) Asia
     6) Atlantic Ocean
     7) Australia
     8) Europe
     9) Indian Ocean
    10) Pacific Ocean
    11) none - I want to specify the time zone using the Posix TZ format.
    #? 5
    Please select a country.
     1) Afghanistan          18) Israel            35) Palestine
     2) Armenia          19) Japan            36) Philippines
     3) Azerbaijan          20) Jordan            37) Qatar
     4) Bahrain          21) Kazakhstan        38) Russia
     5) Bangladesh          22) Korea (North)        39) Saudi Arabia
     6) Bhutan          23) Korea (South)        40) Singapore
     7) Brunei          24) Kuwait            41) Sri Lanka
     8) Cambodia          25) Kyrgyzstan        42) Syria
     9) China          26) Laos            43) Taiwan
    10) Cyprus          27) Lebanon            44) Tajikistan
    11) East Timor          28) Macau            45) Thailand
    12) Georgia          29) Malaysia            46) Turkmenistan
    13) Hong Kong          30) Mongolia            47) United Arab Emirates
    14) India          31) Myanmar (Burma)        48) Uzbekistan
    15) Indonesia          32) Nepal            49) Vietnam
    16) Iran          33) Oman            50) Yemen
    17) Iraq          34) Pakistan
    #? 13
    
    The following information has been given:
    
        Hong Kong
    
    Therefore TZ='Asia/Hong_Kong' will be used.
    Local time is now:    Wed Aug 27 23:03:17 HKT 2014.
    Universal Time is now:    Wed Aug 27 15:03:17 UTC 2014.
    Is the above information OK?
    1) Yes
    2) No
    #? 1
    
    You can make this change permanent for yourself by appending the line
        TZ='Asia/Hong_Kong'; export TZ
    to the file '.profile' in your home directory; then log out and log in again.
    
    Here is that TZ value again, this time on standard output so that you
    can use the /usr/bin/tzselect command in shell scripts:
    Asia/Hong_Kong

    然后 vi /etc/profile插入

    TZ='Asia/Hong_Kong'; export TZ

    保存,使文件生效 source /etc/profile 当然需要root权限

  • 相关阅读:
    iOS渠道分包2种模式之包内注入文件分包(iOS13验证签名问题)
    iOS13 新特性简介
    OC 字典dictionaryWithObjectsAndKeys报错
    博客迁移指南
    block内部实现原理(三)
    block内部实现原理(二)
    block内部实现原理(一)
    iOS:记一次Mac OS X 测试版(OS X EL Capitan) APP发布过程
    iOS: El Capitan Beta 下 Xcode6.4 不显示Scheme菜单
    iOS: UIWebView 中不加载图片(即浏览器常见的无图模式)
  • 原文地址:https://www.cnblogs.com/myfield/p/3939578.html
Copyright © 2011-2022 走看看