SimpleDateFormat 与时区

Posted zhouziyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SimpleDateFormat 与时区相关的知识,希望对你有一定的参考价值。

技术图片

 

Date now=new Date();

//yyyy年MM月dd日 HH时mm分ss秒      HH为24小时  hh为12小时

//yy/MM/dd HH:mm

//yyyy-MM-dd HH:mm:ss    ==  now.toLocaleString();

格式可以自由组合,不受年月日 : 时分限制等限制 如下:

技术图片
1   try {
2             SimpleDateFormat format = new SimpleDateFormat("yyyy问你MM年dd HH?mm我ss");   //但不可有字母
3             Date date = format.parse("2014问你12年24 11?20我46");
4             SimpleDateFormat normalformat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
5             String dateStr =  normalformat.format(date);
6             System.out.println("dateStr=" +dateStr);
7         }catch (Exception e){
8             System.out.println("e.getMessage()=" +e.getMessage());
9         }
技术图片

 

技术图片
1         try {
2             SimpleDateFormat format = new SimpleDateFormat("yyyy(MM我dd HH?mm我ss");
3             Date date = format.parse("2014(12我24 11?20我46");
4             SimpleDateFormat normalformat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
5             String dateStr =  normalformat.format(date);
6             System.out.println("dateStr=" +dateStr);
7         }catch (Exception e){
8             System.out.println("e.getMessage()=" +e.getMessage());
9         }
技术图片

 

结果:dateStr=2014年12月24日 11:20:46

 

技术图片
 1    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒",Locale.ROOT);  //Local.root表示显示时间的格式按照系统上当地时间显示,还有Local.Chinese 等
 2     //在1989.4.11-1989.9.17期间id为GMT+08:00比id为Asia/Shanghai毫秒值多一个小时,其余时间段相等 修改方案:时区id改为:Asia/Shanghai
 3    dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));    //可以通过此芳芳设置当前时区为东八区,如不设置,默认是当前手机系统所指时区,GMT+08:00时区在
 4    String formatedTimeStr = dateFormat.format(now);   //得到当前时间的指定格式 
 8    Date date2 = dateFormat.parse("2017年11月18日 12时20分");  //解析出date对象获取毫秒值
10    date2.getTime(); //获取毫秒值
技术图片
技术图片
 1  try{
 2 
 3 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
 4 dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
 5 Log.i("test","str=" + dateFormat.getTimeZone().getID());
 6 Date date = dateFormat.parse("1989年4月11日 0时01分00秒");
 7 Log.i("test","str=" + date.getTime());
 8 
 9 SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
10 dateFormat2.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
11 Log.i("test","str=" + dateFormat2.getTimeZone().getID());
12 // Date date2 = new Date("1989年5月31日0时1分0秒");
13 Date date2 = dateFormat2.parse("1989年4月11日 0时01分00秒"); //1989年9月18日
14 // String str2 = dateFormat2.format(date2);
15 Log.i("test","str=2=" + date2.getTime());
16 }catch (Exception e){
17 e.printStackTrace();
18 }
技术图片

 

时间毫秒值与时区

时间毫秒值 指的是0度经线的位置 从1970.1.1日0点0分0秒开始毫秒值

对于同一个毫秒值,世界各地(24个)时区东1-东12,西1-西12  各个时区对应时间不一样

向东每个时区逐+1小时,向西每个时区逐减1小时

例如:在0度经线对应2017.11.18 12时30分30秒,在东1区对应 2017.11.18 13时30分30秒,在西1区对应时间2017.11.18 11时30分30秒 ,以此类推

同一个时间,在各个时区,对应的毫秒值也不同 , 比如:2017.11.18 12时30分30秒, 东12区对应的毫秒值最小,西12区对应的毫秒值最大。

 

以上是关于SimpleDateFormat 与时区的主要内容,如果未能解决你的问题,请参考以下文章

SimpleDateFormat 解析丢失时区 [重复]

如果手机时区已更改,SimpleDateFormat setTimeZone无效

Java SimpleDateFormat时间解析时区问题

设置时区的 SimpleDateFormat 获得正确的值但区域错误

遇到的问题---java---使用SimpleDateFormat进行时区加8小时后出现24点的数据,导致时间异常无法入库

遇到的问题---java---使用SimpleDateFormat进行时区加8小时后出现24点的数据,导致时间异常无法入库