浅谈SimpleDateFormat类(下)

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

前言

1
复制代码 大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

1
lua复制代码 本文主要介绍SimpleDateFormat类一些构造方法和format,parse方法以及具体使用。

传送门:浅谈SimpleDateFormat类(上)

  1. 构造方法

1.1 SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)

SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用给定的模式和日期符号构造 SimpleDateFormat

第二个参数DateFormatSymbols 是一个公共类,用于封装可本地化的日期-时间格式化数据,如月名、星期几的名称和时区数据。

1
2
ini复制代码 DateFormatSymbols value = new DateFormatSymbols();
 DateFormatSymbols value1 = new DateFormatSymbols(Locale.ENGLISH);//参数是local对象

可选参数:

image-20211116223828069

实例展示:

1
2
3
4
5
6
7
8
9
10
11
ini复制代码 DateFormatSymbols value = new DateFormatSymbols();
 DateFormatSymbols value1 = new DateFormatSymbols(Locale.ENGLISH);
 ​
 SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS'Z'", value);
 SimpleDateFormat simpleDateFormat5 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS'Z'", value1);
 ​
 Date date4 = new Date();
 String format4 = simpleDateFormat4.format(date4);
 String format5 = simpleDateFormat5.format(date4);
 System.out.println(format4);
 System.out.println(format5);

image-20211116225235787

1.2 SimpleDateFormat(String pattern, Locale locale)

SimpleDateFormat(String pattern, Locale locale) 用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat

这个构造函数我理解为上面哪个函数的简化版,只需要传递一个Local对象就可以。

实例展示:

1
2
3
4
5
6
7
ini复制代码 /*
 4.给定模式和语言环境
  */
 SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS'Z'",Locale.ENGLISH);
 Date date3 = new Date();
 String format3 = simpleDateFormat3.format(date3);
 System.out.println(format3);

image-20211116225428325

参数解析见上面。

  1. SimpleDateFormat类的方法

2.1 format(Date date)

String format(Date date)将传入的Date对象根据自定义的格式转化为字符串。

源码:

1
2
3
4
5
typescript复制代码 public final String format(Date date)
 {
    return format(date, new StringBuffer(),
                  DontCareFieldPosition.INSTANCE).toString();
 }

这里用的format其实是从DateFormat父类继承而来的,因此我们在使用时也常使用DateFormat创建SimpleDateFormat对象。

1
2
3
ini复制代码 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
 String format = df.format(new Date());
 System.out.println(format);

2.2 parse(String str)

Date parse(String str)将传入的字符串根据定义格式转化为Date对象。

源码:

1
2
3
4
5
6
7
8
9
java复制代码 public Date parse(String source) throws ParseException
 {
    ParsePosition pos = new ParsePosition(0);
    Date result = parse(source, pos);
    if (pos.index == 0)
        throw new ParseException("Unparseable date: "" + source + """ ,
            pos.errorIndex);
    return result;
 }

这里的parse方法也是从父类继承而来。

1
2
3
4
5
6
7
ini复制代码 String str = "2019年12月25日";
 try {
    Date parse = df.parse(str);
    System.out.println(parse);
 } catch (ParseException e) {
    e.printStackTrace();
 }
  1. SimpleDateFormat类的应用实例

计算你现在出生了多少天。

思路:

  1. 计算出生日期到标准时间的时间长度
  2. 计算现在到标准时间的时间长度
  3. 两者相减

具体实现:

1
2
3
4
5
6
7
8
9
10
11
ini复制代码 public class SimpleDateFormatTest {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String birthday = "2000年11月1日";
        Date timeBirthday = df.parse(birthday);
        Date nowTime = new Date();
        //相减后得到毫秒数,换算成天数
        long day = (nowTime.getTime()-timeBirthday.getTime())/1000/60/60/24;
        System.out.println(day);
    }
 }

结语

致此关于SimpleDateFormat类的学习就到这里了,希望能对读者有所帮助。如有不正之处,欢迎掘友们留言指正。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%