当前位置:   article > 正文

Android日常开发 - SimpleDateFormat设置时区_android simpledateformat

android simpledateformat

Android日常开发 - SimpleDateFormat设置时区

海外项目中由于地区不同,时区也会不同。因为时区的不同,导致相同时间戳转出的日期有所不同,而且相同日期转时间戳也会不同

本文使用SimpleDateFormat进行Date和Str的转换

1、str转Date

//将"2022-05-30 10:00:00"转成Date,设置不同时区看看Date有啥区别
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));   //0时区
System.out.println(simpleDateFormat.parse("2022-05-30 10:00:00").getTime()); //1653904800000
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));  //马德里,对应正二区
System.out.println(simpleDateFormat.parse("2022-05-30 10:00:00").getTime()); //1653897600000
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));  //上海,对应正八区
System.out.println(simpleDateFormat.parse("2022-05-30 10:00:00").getTime());  //1653876000000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

根据Date的getTime得出一个结论,str转Date的时候,如果时区增加一时区,Date的时间戳小1小时对应的毫秒值

2、Date转str

//将同一时间戳转成Str,设置不同时区看看Str的区别
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));   //0时区
long time = simpleDateFormat.parse("2022-05-30 10:00:00").getTime(); //1653904800000
System.out.println(simpleDateFormat.format(time)); //2022-05-30 10:00:00
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Madrid")); //马德里,对应正二区
System.out.println(simpleDateFormat.format(time)); //2022-05-30 12:00:00
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); //上海,对应正八区
System.out.println(simpleDateFormat.format(time)); //2022-05-30 18:00:00
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

根据最终的Str,得出结论,对于同一时间戳转Str,当设置时区大一时区,得到的Str日期大一小时

3、计算日期对应的时间戳差

一定要注意,根据计算两个年月日格式的日期之间差了多少天的情况。一般情况下,20220531和20220530对应时间戳的差值应该是86400000,也就是一天的毫秒数。在我的程序中,遇到过两个日期对应时间戳差值并不是86400000的整倍数,这样就不能准确的根据86400000算出差了多少天,而结果是一个小数!!!

例如,西班牙2时区,计算20220328和20220327对应时间戳的差值

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Madrid")); //设置西班牙2时区
Date date1 = sdf.parse("20220328");
Date date2 = sdf.parse("20220327");
long result = date1.getTime() - date2.getTime();
System.out.println(result); //82800000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Excuse me!!!,结果82800000让我在风中凌乱。

其实也没啥影响的!

我遇到的问题,只是一个方法将82800000/86400000的结果转成double并且进一,另一个方法将结果转成int处理,结果就是两个方法得到的值不一致。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/594177
推荐阅读
相关标签
  

闽ICP备14008679号