在实际开发中经常会遇到日期类型的操作,Java对日期类型的操作提供了良好的支持,有java.util包中的Date类、Calender类,还有java.text包中的DateFormat类及它的子类SimpleDateFormat类。
1、Date类
java.util包中的Date类用于表示日期和时间,里面大多数构造器方法和常用方法被标记为已过时,但创建日期的方法很常用,它的构造方法中只有2个没有标记过时,以下案例来演示,
import java.util.Date; public class TestDate { public static void main(String[] args) { Date date1=new Date(); System.out.println(date1); Date date2 = new Date(888877775555L); System.out.println(date2); } }
2、Calender类
Calender类可以将取得时间精确到毫秒。Calender类是一个抽象类,它提供了很多常量,Calender类常量表和Calender类的常用方法,表格如下,
public static final int YEAR | 获取年 |
public static final int MONTE | 获取月 |
public static final int DAY_OF_MONTH | 获取日 |
public static final int HOUR_OF_DAY | 获取小时,24小时制 |
public static final int MINUTE | 获取分 |
public static final int SECOND | 获取秒 |
public static final int MILLISECOND | 获取毫秒 |
方法声明 | 功能描述 |
static Calender getInstance() | 使用默认时区和语言环境获取得一个日历 |
static Calender getInstance(Locate aLocate) | 使用默认时区和指定语言环境获得一个日历 |
int get(int field) | 返回给定日历字段的值 |
boolean after(Object when) | 判断Calender表示的时间是否在指定Object表示的时间之后,返回判断结果。 |
boolean before(Object when) | 判断Calender表示的时间是否在指定Object表示的时间之前,返回判 |
3、DateFormat类
实际开发中需要对日期进行格式化操作,Java提供了DateFormat类用于支持日期格式化。该类是一个抽象类,需要通过它的一些静态方法来获取它的示例对象,有一些方法可以用,如下,
方法声明 | 功能描述 |
static DateFormat getDateInstance() | 获取日期格式器,该格式器具有默认语言环境的默认格式化风格 |
static DateFormat getDateInstance(int style,Locale aLocale) | 获取日期格式器,该格式器具有给定语言环境的格式化风格 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale aLocale) | 获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格 |
static DateFormat getDateTimeInstance() | 获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格 |
String format(Date date) | 将一个Date格式化为日期或时间字符串 |
Date parse(String source) | 从给定字符串的开头解析文本,以生成一个日期 |
相关方法演示如下,
public class TestDateFormat { public static void main(String[] args) { DateFormat df1 = DateFormat.getDateInstance(); DateFormat df2 = DateFormat.getTimeInstance(); DateFormat df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh","CN")); DateFormat df4 =DateFormat.getTimeInstance(DateFormat.ERA_FIELD,new Locale("zh","CN")); System.out.println(df1.format(new Date())); System.out.println(df2.format(new Date())); System.out.println(df3.format(new Date())); System.out.println(df4.format(new Date())); } }
4、SimpleDateFormat类
如果想要得到特殊的日期显示格式,可以通过DateFormat的子类SimpleDateFormat类来实现,(当然,因为SimpleDateFormat类继承了DateFormat类,所以,它可以直接使用父类的方法格式化日期和时间),SimpleDateFormat位于java.text包中。要定义格式化日期,需要有一些特定的日期标记来表示日期格式,常用的日期标记如下表,
日期标记 | 功能描述 |
---|---|
y | 年,需要用yyyy表示年份的4位数 |
M | 月份,需要用MM表示月份的2位数 |
d | 天数,需要用dd表示天数的2位数 |
H | 小时(24小时制,需要用hh表示小数的2位数) |
h | 小时(12小时制,需要用hh表示小数的2位数) |
m | 分钟,需要用mm表示分钟的2位数 |
s | 秒数,需要用ss表示秒数的2位数 |
S | 毫秒,需要用SSS表示毫秒的3位数 |
G | 公元,只需要写一个G表示公元 |
在创建SimpleDateFormat类的实例对象时需要用到它的构造方法,有四个,有一个最常用:
public SimpleDateFormat(String pattern)
下面通过一个案例演示,
SimpleDateFormat sdf = new SimpleDateFormat(); String date = sdf.format(new Date()); System.out.println("默认格式:"+date); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); date = sdf1.format(new Date()); System.out.println("自定义格式1:"+date); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS"); date = sdf2.format(new Date()); System.out.println("自定义格式2:"+date);
运行结果
5、日期时间API
java8之前的Date类和Calender类都是线程不安全的,而且使用起来比较麻烦,java8提供的全信的时间日期API有LocalDate(日期)、LocalTime(时间)、LocalDateTime(时间和日期)、Instant(时间戳)、Period(计算两个日期间隔),下面演示一些API用法
1、本地化日期时期API
LocalDate(日期)、LocalTime(时间)、LocalDateTime(时间和日期)可以用在不需要处理时区的情况中,
public class DateNew{ public static void main(String[] args){ DateNew tester = new DateNew(); tester.testLocalDateTime();}public void testLocalDateTime(){ //获取当前时间 LocalDateTime currentTime = LocalDateTime.now() ; System.out.println("当前时间:"+currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1:"+currentTime); Month month = currentTime.getMonth(); int day=currentTime.getDayOfMonth(); int second = currentTime.getSecond(); System.out.println(month + "\t"+day+"\t"+second); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2:"+date2); //12 December 2021 LocalDate date3 = LocalDate.of(2021,Month.DECEMBER,12); System.out.println("date3:"+date3); //22小时15分钟 LocalTime date4 = LocalTime.of(22,15); System.out.println("date4:"+date4); //解析字符串 LocalTime date5 = LocalTime.parse("22:15:30"); System.out.println("date5:"+date5); } }