java关于日期处理详解
说到Java中日期处理,有四个类需要大家认真理解
一,Date
Date类只是一个对long值的对象封装。 Date类放在java.util包中,因此使用时需要用import关键字引入。
Java获取系统时间:Date now = new Date();
getTime()方法返回自1970年1月1日 00:00:00 GMT以来此Date对象表示的毫秒数。
从JDK1.1开始,应该使用Calendar类实现日期和时间字段之间转换,使用DateFormat类来格式化和分析日期字符串。Date中的相应方法已废弃。
二,DateFormat
DateFormat类用来格式化或解析日期或时间。DateFormat类提供了很多静态方法,可以将日期或时间格式化成不同的风格。 DateFormat类是一个抽象类,是Format的子类,因此不能使用new的方式创建对象,在使用时可以直接使用NumberFormat类中提供的静态方法为其实例化。 DateFormat可以解析任何语言环境的日期,其代码可完全与语言环境的约定无关。
DateFormat类的常用方法:
getInstance() 返回DateFormat的一个实例
getDateInstance() 返回日期格式实例
getTimeInstance() 返回时间格式实例
getDateTimeInstance() 返回的日期时间格式实例
format() 格式化
parse() 根据指定格式将字符串转换成 一个日期
具体使用方法如下所示:
// 系统时间
Date date = new Date();
// 使用默认格式
DateFormat df1 = DateFormat.getInstance();
System.out.println(df1.format(date));
System.out.println("------华丽的-----------------------分割线-----");
// 使用日期的默认格式
DateFormat df2 = DateFormat.getDateInstance();
System.out.println(df2.format(date));
// 格式化风格包括FULL、LONG、MEDIUM和SHORT
DateFormat df3 = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(df3.format(date));
// 自定义格式化风格和语言环境
DateFormat df4 = DateFormat.getDateInstance(DateFormat.LONG, Locale.JAPAN);
System.out.println(df4.format(date));
System.out.println("------华丽的-----------------------分割线-----");
// 使用时间的默认格式
DateFormat df5 = DateFormat.getTimeInstance();
System.out.println(df5.format(date));
// 格式化风格包括FULL、LONG、MEDIUM和SHORT
DateFormat df6 = DateFormat.getTimeInstance(DateFormat.FULL);
System.out.println(df6.format(date));
// 自定义格式化风格和语言环境
DateFormat df7 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);
System.out.println(df7.format(date));
System.out.println("------华丽的-----------------------分割线-----");
// 使用日期时间的默认格式
DateFormat df8 = DateFormat.getDateTimeInstance();
System.out.println(df8.format(date));
// 格式化风格包括FULL、LONG、MEDIUM和SHORT
DateFormat df9 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG);
System.out.println(df9.format(date));
// 自定义格式化风格和语言环境
DateFormat df10 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM,
Locale.US);
System.out.println(df10.format(date));
System.out.println("------华丽的-----------------------分割线-----");
DateFormat dfFormat = DateFormat.getDateTimeInstance();
Date dt;
try {
dt = dfFormat.parse("2019/02/14 17:20:30");
System.out.println(dt);
} catch (ParseException e) {
e.printStackTrace();
}
运行结果如下图所示:
三,SimpleDateFormat
SimpleDateFormat类是DateFormat类的一个具体子类,用于格式化日期或时间。 SimpleDateFormat类可以直接使用new关键字创建对象。 SimpleDateFormat类可以根据指定的模式对日期或时间进行格式化。
常用的模式:
yyyy 年
MM 月 必须大写、否则就是分钟
dd 日
HH 时 24小时制,如果是小写、为12小时制
mm 分 一定要小写
ss 秒
SSS 毫秒 一定要大写、否则就是秒
提示:SimpleDateFormat用起来比DateFormat更加自由和方便。
具体方法如下所示:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS");
System.out.println(sdf.format(date));
System.out.println(date.toString());
System.out.println("------华丽的-----------------------分割线-----");
sdf = new SimpleDateFormat("yyyy/MM/dd");
try {
date = sdf.parse("2019/02/14");
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
// 可以在不创建新的对象时更改日期的格式
sdf.applyPattern("yyyy'年'MM'月'dd'日'");
System.out.println(sdf.format(date));
运行结果如下图所示:
四,Calender
Calendar类是一个抽象类,因此不能使用new的方式创建对象,在使用时可以直接使用Calendar类中提供的静态方法getInstance()取得Calendar类的一个实例。 Calendar类为一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。在编码过程中,Calender还是十分常用的。
具体的使用方法如下所示:
Calendar c = Calendar.getInstance();
System.out.println("年:" + c.get(Calendar.YEAR));
System.out.println("月:" + (c.get(Calendar.MONTH) + 1)); // 月从0开始
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH)); // 可以使用Calendar.DATE
System.out.println("时(12小时制):" + c.get(Calendar.HOUR)); // 0----11
System.out.println("时(24小时制):" + c.get(Calendar.HOUR_OF_DAY)); // 0----23
System.out.println("分:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
Date date = c.getTime();
System.out.println("时间:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(date));
String week = null;
switch (c.get(Calendar.DAY_OF_WEEK)) {
case Calendar.SUNDAY:
week = "星期日";
break;
case Calendar.MONDAY:
week = "星期一";
break;
case Calendar.TUESDAY:
week = "星期二";
break;
case Calendar.WEDNESDAY:
week = "星期三";
break;
case Calendar.THURSDAY:
week = "星期四";
break;
case Calendar.FRIDAY:
week = "星期五";
break;
case Calendar.SATURDAY:
week = "星期六";
break;
}
System.out.println(week);
// 加5年
c.add(Calendar.YEAR, 5);
System.out.println("新的年:" + c.get(Calendar.YEAR));
// 减9个月
c.add(Calendar.MONTH, -9);
System.out.println("新的月:" + (c.get(Calendar.MONTH) + 1));
// 加25天
c.add(Calendar.DATE, 25);
System.out.println("新的日:" + c.get(Calendar.DATE));
date = c.getTime();
System.out.println("新的時間:" + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(date));
}
运行结果如下图所示: