JDK 8 ---- Date

----------------------聊一聊Jdk 8 中Date 的新增字段----------------------

一丶 JDK1.8 的改进:
  • 不变性:新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。
  • 关注点分离:新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类。
  • 清晰:在所有的类中,方法都被明确定义用以完成相同的行为。举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。为了更好的处理问题,所有的类都使用了工厂模式和策略模式,一旦你使用了其中某个类的方法,与其他类协同工作并不困难。
  • 实用操作:所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。
  • 可扩展性:新的日期/时间API是工作在ISO-8601日历系统上的,但我们也可以将其应用在非IOS的日历上。
二丶Date新增字段:
  • instant -------- 时间戳
  • LocalDate -------- 日期
  • LocalTime -------- 时间
  • LocalDateTime -------- 时间日期
  • ZonedDateTime -------- 一个包含时区的完整的日期时间
  • Period -------- 时间段
  • ZoneOffset -------- 时区偏移量
  • Clock -------- 时钟
三丶 场景使用:
  1. 获取当前时间:
Instant instant = Instant.now();					 //获取当前时间戳

LocalDate localDate = LocalDate.now(); 			     //获取当前日期

LocalTime localTime = LocalTime.now(); 			     //获取当前时刻

LocalDateTime localDateTime = LocalDateTime.now();   //获取当前具体时间

ZonedDateTime zonedDateTime = ZonedDateTime.now();   //获取带有时区的时间
  1. 时间戳转LocalDateTime:
long time= System.currentTimeMillis();

Instant instant = Instant.ofEpochMilli(time);

LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
  1. LocalDateTime转时间戳:
LocalDateTime dateTime = LocalDateTime.now();

dateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

dateTime.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();

dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
四丶LocalDate方法总结:
   方法									 返回值类型							介绍
getYear()                       		  int       					 获取当前日期的年份
getMonth()                  		      Month      					 获取当前日期的月份对象
getMonthValue()              		      int   						 获取当前日期是第几月
getDayOfWeek()                 		      DayOfWeek 					 表示该对象表示的日期是星期几
getDayOfMonth()               		      int       					 表示该对象表示的日期是这个月第几天
getDayOfYear()                		      int      					     表示该对象表示的日期是今年第几天
withYear(int year)             		      LocalDate 					 修改当前对象的年份
withMonth(int month)            		  LocalDate 					 修改当前对象的月份
withDayOfMonth(intdayOfMonth)   		  LocalDate					     修改当前对象在当月的日期
isLeapYear()               		          boolean  					     是否是闰年
lengthOfMonth()                  		  int        					 这个月有多少天
lengthOfYear()                		      int     					     该对象表示的年份有多少天(365或者366plusYears(longyearsToAdd)         		  LocalDate					     当前对象增加指定的年份数
plusMonths(longmonthsToAdd)      		  LocalDate  					 当前对象增加指定的月份数
plusWeeks(longweeksToAdd)         		  LocalDate  					 当前对象增加指定的周数
plusDays(longdaysToAdd)        		      LocalDate 					 当前对象增加指定的天数
minusYears(longyearsToSubtract)   		  LocalDate 					 当前对象减去指定的年数
minusMonths(longmonthsToSubtract) 		  LocalDate					     当前对象减去注定的月数
minusWeeks(longweeksToSubtract)   		  LocalDate  					 当前对象减去指定的周数
minusDays(longdaysToSubtract)     		  LocalDate   					 当前对象减去指定的天数
compareTo(ChronoLocalDateother)   		  int        					 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
isBefore(ChronoLocalDateother)    		  boolean  					     比较当前对象日期是否在other对象日期之前
isAfter(ChronoLocalDateother)     		  boolean    					 比较当前对象日期是否在other对象日期之后
isEqual(ChronoLocalDateother)    		  boolean   					 比较两个日期对象是否相等

以上就是JDK 1.8 中Date 的一些新特性 , 欢迎参考交流 …

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值