java 8及以下版本的日期时间格式化与解析

本篇文章涵盖多种字符串日期时间格式化以及日期时间解析,包括java8中的日期时间解析与格式化

下图阐述了什么是时间格式化,什么是时间解析

如上图所示 Date---->String 称之为格式化(format), String --->Date 称之为解析(parse), 目标类型是字符串叫格式化,目标类型是日期对象叫解析,读者注意上图箭头的方向,上图节选自  <<java疯狂讲义>>

1,SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

是的,别问,论日期格式化解析,问就是SimpleDateFormat,日常写代码万年不变的就是它,嗯,用的最多的也是它,见过别人的代码里最多的也是它;

          //时间格式化
1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 2 String dateStr = sdf.format(new Date()); 3 System.out.println(dateStr);//打印 2019-10-20 14:14:40

上面代码先是创建SimpleDateFormat对象,然后在该类的构造方法中写了一个pattern(日期时间模板).然后调用该对象的format方法传入Date对象,记得楼主刚学java的时候,甚至还背过这个模板,什么大妹妹,小弟弟之类的,然后还是写错了....

能不能不写这个时间模板呢,用屁股也能想到当然是可以的呢!

          //时间格式化
1
Date date = new Date(); 2 String dateStr = String.format("%TF %TT", date,date); 3 System.out.println(dateStr);// 输出 2019-10-20 14:21:03

你会发现上述代码一毛一样,这是String类的format方法提供的时间格式化,format方法的参数1:格式化模板,参数2:是一个可变参数

参数2的多少取决于你想格式化成什么样子,比如说 yyyy-MM-dd HH:mm:ss 这种是由日期和时间两部分组成,因此可变参数是两个,前面的格式字符串也是两个

格式字符串中的字面代表的含义在java API中有,在  java.util.Formatter 这个类下有详细说明以及实例

't', 'T'  日期/时间  日期和时间转换字符的前缀   'F'  ISO 8601 格式的完整日期    'T'  24 小时制的时间 

楼主的同事,同学曾经坦言,开发多年居然没看多API文档,虽然 JDK API 1.6中文版已经很老了  里面歪果仁翻译的也不是人话  但它毕竟最权威,里面的实例比网上复制的更加令人信服

2,DateFormat

//时间格式化

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);//参数1代表日期,参数2代表时间 String dateStr = df.format(new Date()); System.out.println(dateStr); //输出 2019-10-20 14:44:19

如果你觉得  DateFormat.MEDIUM  太长的话,可以考虑静态导入 import static java.text.DateFormat   是的,IDE工具已经为你做了太多,可能你都忘了静态导入是干嘛的了

静态导入后是这样的了   DateFormat df = DateFormat.getDateTimeInstance(MEDIUM,MEDIUM);

         //时间解析
String str = "2019-01-01 12:00:00";
Date date = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM).parse(str);
System.out.println(date);  //输出 Tue Jan 01 12:00:00 CST 2019

嗯,是的,楼主已经不想写yyyy-MM-dd HH:mm:ss 了

3,DateTimeFormatter

          //时间格式化
String dateStr = DateTimeFormatter.ofPattern("现在是yyyy-MM-dd HH:mm:ss 是今年的第D天").format(LocalDateTime.now());
        //只能自定义模板获取这种格式的了
       //String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));  //反过来调用也可以的呦

System.out.println(dateStr); //输出 现在是2019-10-20 15:07:58 是今年的第293天
          //时间解析
LocalDateTime local = LocalDateTime.parse("2019-01-01 12:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Date date = Date.from( local.atZone( ZoneId.systemDefault()).toInstant());//转换成Date System.out.println(date); //输出 Tue Jan 01 12:00:00 CST 2019

猜你喜欢

转载自www.cnblogs.com/yanyan-rourou/p/11707728.html
今日推荐