SimpleDateFormat类的使用

时间: 2023-07-10 admin IT培训

SimpleDateFormat类的使用

SimpleDateFormat类的使用

概述

SimpleDateFormat类主要用于格式化日期Date类为字符串将日期格式的字符串转换成Date类

构造方法

构造器说明示例
public SimpleDateFormat()无参构造器。SimpleDateFormat dateFormat=new SimpleDateFormat();
public SimpleDateFormat(String pattern)指定日期模式的构造器。常用SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
public SimpleDateFormat(String pattern, Locale locale)使用给定模式和给定语言环境的默认日期格式符号构造一个SimpleDateFormat 。不常用SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd", Locale.CHINESE);

SimpleDateFormat类最常用的构造方法就是第二个,在构造器中指定日期模式。

pattern模式字符串

pattern模式字符串中可以使用的日期标识有如下这些:

匹配模式备注
yyyy
MM
dd
hh12小时制(1~12)
HH24小时制(0~23)
mm
ss
S毫秒
E星期几
D一年中的第几天
F一月中的第几个星期
w一年中的第几个星期
W一月中的第几个星期
a上下午标识
k和HH差不多,表示24小时制(1~24)
K和hh差不多,表示12小时制(0~11)
z表示时区

实例如下:

public class Demo {public static void main(String[] args) {SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 S毫秒 a z");String format = dateFormat.format(new Date());System.out.println(format);}
}

常用方法

将日期字符串转换成Date类对象

常将日期格式字符串转换成Date类对象的方法是parse()方法。其API说明如下:

成员方法说明
public Date parse(String source)从字符串的开头将指定字符串解析成日期对象Date。常用
public abstract Date parse(String source, ParsePosition pos)从字符串的指定位置将指定字符串解析成日期对象Date。默认情况下,解析是宽松的:如果输入不是此对象的格式方法使用的形式,但仍然可以解析为日期,则解析成功。 客户可以通过调用setLenient(false)来坚持严格遵守格式。

对应的实例是:

public class Demo {public static void main(String[] args) throws NoSuchMethodException, NoSuchFieldException, ParseException {// parse(String source)方法SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// 可以解析完全符合pattern模式字符串的日期字符串Date date1 = dateFormat.parse("2021-12-13");System.out.println(date1);// 可以解析字符串左匹配pattern模式字符串的日期字符串,即从字符串开头匹配解析Date date2 = dateFormat.parse("2021-12-13日期之后,我们开始说Hello World...");System.out.println(date2);// 但如果字符串开头不匹配pattern模式字符串,那么该方法将报错//Date date3 = dateFormat.parse("起始日期是2021-12-13");//System.out.println(date3);// 抛出异常:java.text.ParseException: Unparseable date: "起始日期是2021-12-13"// parse(String source, ParsePosition pos)方法// 可以解析完全符合pattern模式字符串的日期字符串,但ParsePosition的起始索引应该设置为0Date date4 = dateFormat.parse("2021-12-13", new ParsePosition(0));System.out.println(date4);// 可以解析字符串左匹配pattern模式字符串的日期字符串,即从字符串开头匹配解析,即index表示第几个字符(从1开始)Date date5 = dateFormat.parse("2021-12-13日期之后,我们开始说Hello World...", new ParsePosition(0));System.out.println(date5);// 如果字符串开头不匹配pattern模式字符串,那么就可以利用ParsePosition类设置匹配的索引位置,从1开始Date date6 = dateFormat.parse("起始日期是2021-12-13", new ParsePosition(5));System.out.println(date6);}
}

将Date类对象转换成日期字符串

成员方法说明
public final String format(Date date)将Date日期类对象转换成日期/时间字符串。常用
public abstract StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)将Date日期类对象转换成日期/时间字符串。date是要格式化为日期/时间的Date对象;toAppendTo返回日期/时间字符串的字符串缓冲区。fieldPosition是跟踪返回字符串中字段的位置。

 常用的就是format(Date date)方法。将Date日期对象转换成日期格式字符串。实例代码如下:

public class Demo {public static void main(String[] args) {SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = dateFormat.format(new Date());System.out.println(format);}
}

其他方法

void setLenient(boolean lenient)

该方法的API如下:

    /*** 设置日期/时间的解析是否宽松。* 如果设置了宽松解析(即设置为true),那么解析器可以解析与此对象格式不精确匹配的输入。* 如果设置了严格解析(即设置为false),那么输入必须与此对象的格式严格匹配。* 此方法等效于:getCalendar().setLenient(lenient)。** @param lenient 当为true,解析是宽松的;当为false,解析是严格的*/public void setLenient(boolean lenient){calendar.setLenient(lenient);}

可能只是看介绍是无法明白严格解析和宽松解析的区别。看下面的代码可能有更清晰的认知:

public class Demo {public static void main(String[] args) throws ParseException {SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");// 宽松解析,即虽然"2021-26-15"这个日期字符串中关于月份的日期不对,但通过宽松解析,26个月可以解析为2年2个月,而不会报错dateFormat.setLenient(true);Date date1 = dateFormat.parse("2021-26-15");System.out.println(date1);// 严格解析,即"2021-26-15"中的月份数字只能是1到12,不能是其他数字,否则会报错,无法解析成功dateFormat.setLenient(false);Date date2 = dateFormat.parse("2021-26-15");// java.text.ParseException: Unparseable date: "2021-26-15"System.out.println(date2);}
}