首页 > 代码库 > SimpleDateFormat解析的时区问题
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 ~]$ tzselectPlease 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 Ocean10) Pacific Ocean11) none - I want to specify the time zone using the Posix TZ format.#? 5Please 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) Taiwan10) Cyprus 27) Lebanon 44) Tajikistan11) East Timor 28) Macau 45) Thailand12) Georgia 29) Malaysia 46) Turkmenistan13) Hong Kong 30) Mongolia 47) United Arab Emirates14) India 31) Myanmar (Burma) 48) Uzbekistan15) Indonesia 32) Nepal 49) Vietnam16) Iran 33) Oman 50) Yemen17) Iraq 34) Pakistan#? 13The following information has been given: Hong KongTherefore 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) Yes2) No#? 1You can make this change permanent for yourself by appending the line TZ=‘Asia/Hong_Kong‘; export TZto 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 youcan 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权限
SimpleDateFormat解析的时区问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。