Java日期时间——有JDK1.8新特性欧

Java日期时间

0 阅读须知


​ Java的日期时间主要掌握Date、Calendar、SimpleDateFormat、LocalDate、LocalTime、LocalDateTime这几大类,其中LocalDate、LocalTime、LocalDateTime是JDK1.8新出的类,需要特别注意。

单词识记

单词汉译
leap year闰年
duration持续时间;期间
period一段时间;时期;(人生或国家历史的)阶段,时代;纪
zone id分区ID
instant瞬间;片刻;某一时刻

1 Date类


​ Date类主要用来获取日期时间。

方法名称描述
public Date( )获取当前的日期时间对象
public Date(long date)将时间戳数字转为Date类对象
public long getTime( )将日期时间以long数据类型的形式返回
public boolean after(Date when)是否在指定的日期时间之后
public boolean before(Date when)是否在指定的日期时间之前

2 Calendar类


​ calendar类属于抽象类型,主要用来对日期时间的运算。

方法名称描述
public static Calendar getInstance( )获取Calendar对象
public int get(int field)获取成员结构的日期或时间数据
public void set(int field,int value)设置指定成员结构的数据内容
public abstract void add(int field,int amount)在指定成员结构上进行加法计算

3 SimpleDateFormat类


​ 对日期进行格式化或将字符串转为日期,存在如下匹配表达式:

年(yyyy)、月(MM)、日(dd)、时(HH)、分(mm)、秒(ss)、毫秒(SSS)
方法名称描述
public SimpleDateFormat(String pattern)实例化SimpleDateFormat类对象,并设置匹配模式
public final String format(Date date)将日期格式转换为字符串
public Date parse(String source) throws ParseException将字符串转换为日期

注意:使用parse将字符串转为日期存在线程安全问题,而使用format将日期转为字符串不存在线程安全问题。

 //date-->String:线程安全
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS");
String cur_time = sdf.format(date);
System.out.println(cur_time);

//String-->date:线程不安全
String time="2020/02/26 14:35:47:819";
try {
    Date cur_date = sdf.parse(time);
    System.out.println(cur_date);
} catch (ParseException e) {
    e.printStackTrace();
}

​ 拓展形式转换:
在这里插入图片描述

4 JDK1.8新特性—LocalDate、LocalTime、LocalDateTime


类型描述
LocalDate处理日期类
LocalTime处理时间类
LocalDateTime处理日期时间类

代码实现如下:

/**
*1. LocalDate常用方法
*/
LocalDate today = LocalDate.now();//获取当前日期
System.out.println(String.format("[当前日期]%d-%d-	         %d",today.getYear(),today.getMonthValue(),today.getDayOfMonth()));
System.out.println("[今天所处一月的周数]"+today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
System.out.println("[今天所处一年的周数]"+today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
System.out.println("[今天所处一年的天数]"+today.getDayOfYear());

LocalDate past = LocalDate.parse("1998-10-13");//获取1998-10-13
System.out.println("[1998年是否是闰年]"+past.isLeapYear());
System.out.println("[1998-10-13星期几]"+past.getDayOfWeek());
System.out.println("[1998-10-13所在月的第一天]"+past.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("[1998-10-13所在月的第二天]"+past.withDayOfMonth(2));
System.out.println("[1998-10-13所在月的最后一天]"+past.with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("[1998-10-13之后18年]"+past.plusYears(18));
System.out.println("[1998-10-13之前18个月]"+past.plusMonths(-18));
System.out.println("[1998-10-13所在月的第一个周一]"+past.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));

/**
*2. LocalDateTime与Date、String的转换
*/
//设置匹配表达式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss-SSS");
//获取当前时区
ZoneId zoneId = ZoneId.systemDefault();

//Date-->LocalDateTime-->String:线程安全
Date date= new Date();
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(),zoneId);//Date-->LocalDateTime
String string_datetime = dateTime.format(formatter);
System.out.println("[LocalDateTime-->String]"+string_datetime);

//String-->LocalDateTime-->Date:线程安全
LocalDateTime localDateTime = LocalDateTime.parse(string_datetime,formatter);
Instant instant = localDateTime.atZone(zoneId).toInstant();//获得当前时区的实例
Date d = Date.from(instant);//字符串转为日期
System.out.println("[String-->LocalDateTime-->Date]"+d);

5 总结


​ LocalDate、LocalTime、LocalDateTime相对于Date、Calendar更加安全而且api更加丰富,对日期时间的操作更加容易,非常值得一试。

​ 不断提升自我,迭代自我,我是猿同学~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值