jdk1.8日期时间组件
2017-06-04 14:09
585 查看
jdk1.8日期时间组件
注:个人学习笔记,不保证正确性参考文献:Java Date-Time Packages
jdk8引入了全新的日期和时间组件,并把它们归纳到一系列的包下。核心包java.time使用的历法采用ISO-8601标准,当然,我们也可以使用java.time.chrono包中的一些非标准的历法,比如日本帝国历法(天皇年号)、泰国佛教历法(佛陀诞生)、中华民国历法(辛亥革命)、伊斯兰黑蚩拉历法。java.time.format提供日期的格式化和转换。注意,新的API操作都是线程安全的,因为新的日期API类都是final修饰而不可变的,如果遇到加减运算及格式化操作,本质上会创建新的实例。
java.time包内,有几个比较重要的组件,Instant(时间戳);LocalDate(日期);LocalDate(时间);LocalDateTime(日期时间);ZonedDateTime(带有区域信息的日期时间,比如中国默认使用的是东八区)。Period(如两个日期之间相差的天数);Druation(两个日期时间之间间隔的秒和纳秒)。
Instant
Instant本质上是一个数字时间戳,底层实际上是对System.currentTimeMillis()进行了包装。Instant now = Instant.now(); System.out.println(now.toString()); // 毫秒 System.out.println(now.get(ChronoField.MILLI_OF_SECOND)); // 微秒,只是用毫秒数除以1000 System.out.println(now.get(ChronoField.MICRO_OF_SECOND)); // 纳秒,只是用毫秒数除以1000_000 System.out.println(now.get(ChronoField.NANO_OF_SECOND)); // 毫秒转Instant LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); // 2018-06-16T23:12:01 System.out.println(localDateTime);
LocalDate
LocalDate格式:2017-06-04,类似于java.sql.Date,不包含时间。1.8之前的java.lang.Date是包含时间的,所以从结构上看,1.8之前的设计有些糟糕。// 获得当前日期 LocalDate now = LocalDate.now(); System.out.println(now.toString()); // 日期加上1天 LocalDate localDate2 = now.plusDays(1); System.out.println(localDate2.toString()); // 日期加上一周 LocalDate localDate3 = now.plusWeeks(1); System.out.println(localDate3); // 计算当前年的第52天是几月几号 System.out.println("今年的第52天 = " + now.withDayOfYear(52)); // 字符串转日期 DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01"); LocalDate date = LocalDate.from(dateTemporal); System.out.println(date); // 格式化日期 DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String dateStr = dateToStrFormatter.format(now); System.out.println(dateStr);
LocalTime
LocalTime格式为13:01:02.221,在只需要处理时间的场景下,它变得非常有用。LocalTime localTime = LocalTime.now(); System.out.println("local time = " + localTime); System.out.println("plus 12 hours = " + localTime.plusHours(12));
LocalDateTime
LocalDateTime本质上有LocalDate和LocalTime组成。// 获得当前日期时间 LocalDateTime now = LocalDateTime.now(); System.out.println(now); // 字符串转日期时间。 DateTimeFormatter strToDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); TemporalAccessor dateTemporal = strToDateFormatter.parse("2017-01-01 12:12:13"); LocalDate date = LocalDate.from(dateTemporal); System.out.println(date); // 格式化日期时间 DateTimeFormatter dateToStrFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); String dateStr = dateToStrFormatter.format(now); System.out.println(dateStr);
Period
Period代表的是两个日期之间的天、月、年数差值,当然,我们也可以直接使用日期中的until方法来完成同样的效果。LocalDate startDate = LocalDate.now(); LocalDate endDate = startDate.plusDays(1); Period period = Period.between(startDate, endDate); System.out.println("间隔的天数" + period.getDays()); System.out.println("间隔的月数:" + period.getMonths()); System.out.println("间隔的年数:" + period.getYears()); // 直接使用日期类中的方法计算日期间隔 long days = startDate.until(endDate, ChronoUnit.DAYS); System.out.println("间隔的天数:" + days); long weeks = startDate.until(endDate, ChronoUnit.WEEKS); System.out.println("间隔的周数:" + weeks);
Duration
Duration表示的是两个日期时间间隔的秒以及纳秒数。LocalDateTime start = LocalDateTime.now(); LocalDateTime end = start.plusDays(1); Duration duration = Duration.between(start, end); System.out.println("间隔的秒数:" + duration.get(ChronoUnit.SECONDS)); System.out.println("间隔的纳秒数:" + duration.get(ChronoUnit.NANOS));
相关文章推荐
- JDK1.7和JDK1.8中日期时间使用和处理的不同
- 如何在JDK1.8中愉快地处理日期和时间
- JDK1.8新增的时间日期API
- Android好看的日期时间选择器,自定义的时钟组件
- Android开发之时间日期组件用法实例
- Flex String类型的日期时间给日期组件赋值
- Android开发之日期时间选择组件事…
- delphi 日期与时间组件及相关函数汇总
- Androin 常用组件下拉框日期选择器、时间选择器、RadioButton、CheckBox使用
- android学习笔记(十二)日期、时间组件
- android中的日期和时间组件
- 【Android开发】基本组件-日期、时间拾取器
- Flex - 带时间选择(可手工输入)的日期组件,去掉了 StringToolkit.formatNumberWithChar
- jdk1.8 日期新API LocalDateTime,LocalDate,LocalTime 在Hibernate中无法反序列化解决方法
- 各种杂项组件(3)之--CalendarView(日历视图)、DatePicker/TimePicker(日期、时间选择器)、NumberPicker(数值选择器)
- Android - 时间 日期相关组件
- 关于jdk中API取出的日期和本地系统时间不一致的解决
- datejs-一个很好用的时间日期JavaScript组件
- Android - 时间 日期相关组件
- Bootstrap日期和时间表单组件运用兼容ie8