本篇文章涵盖多种字符串日期时间格式化以及日期时间解析,包括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
原文地址:https://www.cnblogs.com/yanyan-rourou/p/11707728.html