💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] [TOC] # 简介 `java.text.DateFormat` DateFormat 日期/时间格式化子类的抽象类, 使用其子类SimpleDateFormat 实例化 我们可以通过这个类帮助我们完成日期和文本之间的转换,也就是Date对象与String对象之间进行来回转换 * 格式化: 按照指定的格式,从Date对象转换为String对象 * 解析: 按照指定的格式,从String对象转换为Date对象 由于DateFormat为抽象类,我们经常用他的子类SimpleDateFormat 构造方法: ~~~ public SimpleDateFormat() 默认的格式化操作 public SimpleDateFormat(String pattern) 按照指定的格式,进行日期格式化 日期和时间模式 y 年 M 年中的月份 d 月份中的天数 H 一天中的小时数(0-23) m 小时中的分钟数 s 分钟中的秒数 S 毫秒数 ~~~ 方法: ~~~ public final String format(Date date) 把日期 格式化成字符串 public Date parse(String source) 把日期字符串 转换成 日期对象 ~~~ 例子 ~~~ //创建日期格式化对象,在获取格式化对象时可以指定风格 DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化 Date date = new Date(1607616000000L); String str_time = df.format(date); System.out.println(str_time);//2020年12月11日 String str = "2020年12月11日"; DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”); Date date = df.parse( str ); //Date对象中的内容为Fri Dec 11 00:00:00 CST 2020 ~~~ # DateFormat类(日期格式化) DateFormat类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串。 DateFormat类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式的int型的常量,包括FULL, LONG, MEDIUM, DEFAULT, SHORT,实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度。 例如,对于日期/时间“2005年9月15日下午4时41分20秒”,如设置了DateFormat的显示模式,则日期/时间显示样式分别为: * SHORT模式完全是数字的,在中文环境下显示为“05-9-15 下午4:41”;在英文环境下为“9/15/05 4:41 PM”。 * MEDIUM模式比SHORT模式长些,在中文环境显示为“2005-9-15 16:41:20”;在英文环境下显示为“Sep 15, 2005 4:41:20 PM”。 * LONG模式比MEDIUM模式更长一些,在中文环境下显示为“2005年9月15日 下午04时41分20秒”;在英文环境下显示为“September 15, 2005 4:41:20 PM CST”。 * FULL模式指定日期/时间的完整格式,在中文环境下显示为“2005年9月15日 星期四 下午04时41分20秒 CST”;在英文环境下,这个日期/时间显示为“Thursday, September 15, 2005 4:41:20 PM CST”。 # 实例化DateFormat类 实例化DateFormat类有九种方式,以下三种为带参形式,下面列出的三种方式也可以分别不带参,或只带显示样式的参数。 * `getDateInstance(int style, Locale aLocale)`:以指定的日期显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理时间值部分。 * `getTimeInstance(int style, Locale aLocale)`:以指定的时间显示模式和本地信息来获得DateFormat实例对象,该实例对象不处理日期值部分。 * `getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)`:以单独指定的日期显示模式、时间显示模式和本地信息来获得DateFormat实例对象 # DateFormat对象的方法 * format:将date对象格式化为符合某个本地环境习惯的字符串。 * parse:将字符串解析为日期/时间对象。 注意:parse和format完全相反,一个是把date时间转化为相应地区和国家的显示样式,一个是把相应地区的时间日期转化成date对象,该方法在使用时,解析的时间或日期要符合指定的国家、地区格式,否则会抛异常。 DateFormat对象通常不是线程安全的,每个线程都应该创建自己的 DateFormat实例对象。 # 范例 使用DateFormat格式化输出日期 ~~~ public static void main(String[] args) { Date date = new Date(); // DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA); // 16-8-8 // DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA); // 2016-8-8 // DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA); // 2016年8月8日 // DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA); // 2016年8月8日 星期一 DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.CHINA); // 2016-8-8 String str = df.format(date); System.out.println(str); df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA); System.out.println(df.format(date)); df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, Locale.CHINA); System.out.println(df.format(date)); // 得到默认的DateFormat df = DateFormat.getInstance(); System.out.println(df.format(date)); } ~~~ 使用DateFormat反向把一个字符串格式化成一个日期对象 ~~~ /* * 使用DateFormat反向把一个字符串格式化成一个日期对象 */ public static void main(String[] args) throws ParseException { String str = "2016年8月8日 星期一 下午5:57"; DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT, Locale.CHINA); Date date = df.parse(str); System.out.println(date); } ~~~ 运行结果为:`Mon Aug 08 17:57:00 CST 2016` 注意:把相应地区的时间日期转化成date对象时,解析的时间或日期要符合指定的国家、地区格式,否则会抛异常。如下面所示的代码就会抛异常: ~~~ /* * 使用DateFormat反向把一个字符串格式化成一个日期对象 */ public static void main(String[] args) throws ParseException { String str = "2016年8月8日 星期一 下午5:57"; DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA); Date date = df.parse(str); System.out.println(date); } ~~~ 会抛异常如下: ~~~ Exception in thread "main" java.text.ParseException: Unparseable date: "2016年8月8日 星期一 下午5:57" ~~~