日期对象
Date
-
Date
: 表示特定的瞬间,精确到毫秒.通过查阅APIDate
类的描述,发现Date
类拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象.
//创建日期对象,把当前的毫秒值转成日期对象
Date date = new Date(1607616000000L);
System.out.println(date);
//打印的结果 : Fri Dec 11 00:00:00 CST 2020
- 可是将毫秒值转成日期对象后,输出的格式不利于我们阅读,继续查询API,Date中有
getYear , getMouth
等方法,不过他们已经过时了,往下查就会看到toString
方法. - 点开
toString( )
方法查询,上面打印的date
对象就是默认调用了这个toString
方法,并且在这个方法下面还有让我们参鉴toLocaleString
方法,点进去,这个方法又过时了,从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。 既然这个方法被DateFormat.format(Date date) 取代,那么就要去查阅DateFormat类.
DateFormat
-
DateFormat
: 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间.日期/时间格式化子类(如 :SimpleDateFormat
类)允许进行格式化(也就是日期->文本),解析(文本->日期)和标准化 - 我们通过这个类可以帮我们完成日期和文本之间的转换
-
DateFormat
: 可以帮助进行格式化并解析任何语言环境的日期/时间,对于月,星期,甚至是日历格式(阴历和阳历),其代码可完全与语言环境的约定无关.
日期格式
- 要格式化一个当前语言环境下的日期也就是(日期 ->文本),要通过下面的方法来完成,
DateFormat
是抽象类我们需要使用其子类 :SimpleDateFormat
来创建对象 - 构造方法(函数)
SimpleDateFormat(String pattern)
- DateFormat类方法
String format(Date date)
- 代码演示
//创建日期格式化对象,在获取格式化对象时可以指定风格
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
-
DateFormat
类的作用 : 即可以将一个Date
对象转换 为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个Date
对象. - 指定格式的具体规则我们可以参照SimpleDateFormat类的说明,简单介绍 : 规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出.
- 当出现 y 时,会将 y 替换成年
- 当出现 M 时,会将 M 替换成月
- 当出现 d 时,会将 d 替换成日
- 当出现 H 时,会将 H 替换成时
- 当出现 m 时,会将 m 替换成分
- 当出现 s 时,会将 s 替换成秒
DateFormat类常用的方法
-
String format(Date date)
: 将一个Date
格式化为日期/时间字符串 -
Date parse(String source)
: 解析文本,生成一个日期
练习一:把Date对象转换成String
Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020
DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
String str = df.format(date);
//str中的内容为2020年12月11日
练习二:把String转换成Date对象
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
LocalDate
- Java.time.LocalDate :
LocalDate
是一个不可变的类,它表示默认格式(yyyy-MM-dd)的日期,我们可以使用now()
方法得到当地时间,也可以提供输入年份,月份,日期的输入参数来创建一个LocalDate
实例
LocalDate today = LocalDate.now();
System.out.println("Current(当前日期) Date=" + today);
LocalDate firstDay = LocalDate.of(2019, Month.JANUARY, 1);
System.out.println("Specific(特定日期) Date=" + firstDay);
LocalDate dateFromBase = LocalDate.ofEpochDay(365);
System.out.println("365th day from base date= " + dateFromBase);
LocalDate hundredDay2019 = LocalDate.ofYearDay(2019, 100);//获得日期是此年中的第几天
System.out.println("100th day of 2014=" + hundredDay2019);
- 打印结果
Current Date=2019-05-21
Specific Date=2019-01-01
365th day from base date= 1971-01-01
100th day of 2019=2019-04-10
-
static LocalDate parse(CharSequence text)
从一个文本字符串(如2007-12-03获取一个LocalDate
的实例) -
String toString()
: 将此日期输出为String,如 : 2007-12-03 -
int getYear( )
: 获取当前日期的年份 -
int getMothValue( )
: 获取当前日期的月份 -
DayOfWeek getDayOfWeek( )
: 表示该对象表示的日期是星期几 -
int getDayOfMoth( )
: 表示该对象表示的日期是这个月的第几天 -
int getDayOfYear( )
: 表示该对象表示的日期是今年的第几天 -
LocalDate withYear(int year)
: 修改当前对象的年份 -
LocalDate withMoth(int moth)
: 修改当前对象的月份 -
boolean isLeapYear( )
: 判断是否是闰年 -
int lengthOfMoth( )
: 这个月有多少天 -
int lengthOfYear()
: 该对象表示的年份有多少天(365或者366) -
LocaDate plusYear(long yearsToAdd )
: 当前对象增加指定的年份数 -
LocaDate plusMoth(long monthsToAdd)
: 当前对象增加指定的月份数 -
LocaDate plusDays(long daysToAdd)
: 当前对象增加指定的天数 -
LocaDate minusYear(long yearToSubtract)
: 当前对象减去指定的年数 -
LocaDate minusMoths(long mothsToSubtract)
: 当前对象减去注定的月数 -
LocalDate minusDays(long daysToSubtract)
: 当前对象减去指定的天数 -
int compareTo(ChronoLocalDate other)
: 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚
LocalTime
- java.time.LocalTime:
LocalTime
是一个不可变的类,它的实例代表一个符合人类可读格式的时间,默认格式是 hh:mm:ss.zzz。像 LocalDate 一样,该类也提供了时区支持,同时也可以传入小时、分钟和秒等输入参数创建实例 -
static LocalTime now( )
获取当前时分秒 -
LocalTime withNano(int n)
一般设置为0 清除纳秒
LocalDateTime
- java.time.LocalDateTime:
LocalDateTime
是一个不可变的日期-时间对象,它表示一组日期-时间,默认格式是 yyyy-MM-dd-HH-mm-ss.zzz。它提供了一个工厂方法,接收LocalDate 和LocalTime
输入参数,创建LocalDateTime
实例 -
static LocalDateTime LocalDateTime()
获取当前年月日时分秒 - 把当前时间转为指定格式输出
String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());