今天做开发的时候遇到个日期问题
在本地测试是正常的,在linux服务器运行日期转换的时候出现增加了14个小时
搞了一个下午,总结了些经验分享
先检查服务器的时区和时间,因为JAVA会默认系统时间
检查后还是无法解决,最后是因为代码问题。个人整理了四种方式,供大家参考
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//案例一:正常做法是失败的
String str="Wed Jun 19 05:27:24 CST 2019";
Date date = new Date(str);
String demo1 = format.format(date);
System.out.println("demo1==="+demo1);
//Wed Jun 19 19:27:24 CST 2019
//会因为时间区域问题,增加了14个小时
//案例二:先定义好时间格式,必须把时区确定,中国GMT!!
SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US);
//设置对应时区
df.setTimeZone(new SimpleTimeZone(0, "GMT"));
Date after =df.parse(str);
String demo2 = format.format(after);
System.out.println("demo2==="+demo2);
//案例三:转换到calendar
//获取得LONGTIME,然后设定
long time = after.getTime();
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
String demo3 = format.format(c.getTime());
System.out.println("demo3==="+demo3);
//案例四:切分数组解决
String str1="Wed Jun 19 05:27:24 CST 2019";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String[] dateStr = str1.split(" ");
String strGMT =dateStr[0]+" "+dateStr[1]+" "+dateStr[2]+" "+dateStr[5]+" "+dateStr[3]+" GMT+0800";
Date dd = new Date(Date.parse(strGMT));
String demo4 = format.format(dd);
System.out.println("demo4==="+demo4);
结果:
demo1=2019-06-19 19:27:24
demo2=2019-06-19 05:27:24
demo3=2019-06-19 05:27:24
demo4=2019-06-19 05:27:24