JAVA 本地测试正常,服务器增加了8或14个小时,date,format,timezone

今天做开发的时候遇到个日期问题
在本地测试是正常的,在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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值