1. DateFormat类
DateFormate类是一个抽象类,不能被实例化,但它提供了一系列的静态方法来获取DateFormate类的实例对象。
作用:将Date对象表示的日期以指定的格式输出
-
调用getDateInstance()方法获得的实例对象用于对日期部分进行格式化
-
调用getDateTimeInstance()方法获得的实例对象可以对日期和时间部分进行实例化
定义的常量作为参数传递: -
FULL 完整格式
-
LONG 长格式
-
MEDIUM 普通格式
-
SHORT 短格式
package cn.edu.sdut.acm;
import java.text.*;
import java.util.*;
public class Main{
public static void main(String[] args) {
Date date = new Date(); // 创建Date对象
DateFormat fullFormat = DateFormat.getDateInstance(DateFormat.FULL); // FULL格式的日期格式器对象
DateFormat longFormat = DateFormat.getDateInstance(DateFormat.LONG); // LONG格式的日期格式器对象
DateFormat mediumFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); // MEDIUM格式的日期/时间格式器对象
DateFormat shortFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); // SHORT格式的日期/时间格式器对象
System.out.println(fullFormat.format(date));
System.out.println(longFormat.format(date));
System.out.println(mediumFormat.format(date));
System.out.println(shortFormat.format(date));
}
}
运行结果:
2019年10月28日星期一
2019年10月28日
2019年10月28日 下午6:40:15
2019/10/28 下午6:40
DateFormat提供parse(String source)方法,可以将字符串解析为Date对象,要求字符串必须符合格式要求,否则会抛出异常
package String;
import javax.sound.midi.Soundbank;
import java.text.DateFormat;
import java.text.ParseException;
public class Main {
public static void main(String[] args) throws ParseException {
DateFormat dt1 = DateFormat.getDateInstance(DateFormat.SHORT); // 创建SHORT类型的DateFormat对象
DateFormat dt2 = DateFormat.getDateInstance(DateFormat.LONG); // 创建LONG格式的DateFormat对象
String str1 = "2019/1/21"; // 定义两个日期格式的字符串
String str2 = "2019年01月15日";
System.out.println(dt1.parse(str1));
System.out.println(dt2.parse(str2));
}
}
2. SimpleDateFormat类
SimpleDateFormate类是DateFormat类的子类,可以创建实例对象。在创建实例对象时,它的构造方法需要接收一个表示日期格式模板的字符串参数。
Date对象 ------> 格式化字符串
package cn.edu.sdut.acm;
import java.text.*;
import java.util.*;
public class Main{
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("Gyyyy年MM月dd日:今天是yyyy年的第D天,E"); // 创建一个SimpleDateFormat对象
System.out.println(sdf.format(new Date())); // 按SimpleDateFormat对象的日期模板格式化Date对象
}
}
输出:
公元2019年10月28日:今天是2019年的第301天,周一
格式化字符串 ------> Date对象
package cn.edu.sdut.acm;
import java.text.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); // 创建SimpleDateFormat对象,并指定日期格式
String str = "2019/11/11"; // 定义一个该日期格式的字符串
System.out.println(sdf.parse(str)); // 将字符串解析为Date对象
}
}
输出:
Mon Nov 11 00:00:00 GMT+08:00 2019
3.DateTimeFormatter类
其功能相当于DateFormat类和SimpleDateFormat类的合体,它不仅可以将日期,时间对象格式化为字符串,还能将特定格式的字符串解析为日期,时间对象。
- 日期/时间格式化:
package cn.edu.sdut.acm;
import java.text.*;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.*;
public class Main{
public static void main(String[] args) throws ParseException {
LocalDateTime date = LocalDateTime.now();
// 1. 使用常量创建DateTimeFormatter
DateTimeFormatter dtf1 = DateTimeFormatter.ISO_DATE_TIME;
System.out.println(dtf1.format(date));
// 2. 使用MEDIUM类型风格的DateTimeFormatter
DateTimeFormatter dtf2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(dtf2.format(date));
// 3. 根据模式字符串来创建DateTimeFormatter格式器
DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dtf3.format(date));
System.out.println(date.format(dtf3));
}
}
输出:
2019-10-28T19:40:30.6350935
2019年10月28日 下午7:40:30
2019-10-28 19:40:30
2019-10-28 19:40:30
- 解析字符串
package cn.edu.sdut.acm;
import java.nio.file.LinkOption;
import java.text.*;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.*;
public class Main{
public static void main(String[] args) throws ParseException {
// 定义两字日期格式的字符串
String str1 = "2019-11-11 20:38:12";
String str2 = "2019年11月11日 16时01分15秒";
// 定义解析所用的格式器
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
// 使用LocalDateTime的parse()方法进行解析
LocalDateTime localDateTime1 = LocalDateTime.parse(str1, formatter1);
LocalDateTime localDateTime2 = LocalDateTime.parse(str2, formatter2);
System.out.println(localDateTime1);
System.out.println(localDateTime2);
}
}
输出:
2019-11-11T20:38:12
2019-11-11T16:01:15