spring boot 最佳实践(三)--使用java.time

来源:互联网 发布:淘宝上刘老中医可靠吗 编辑:程序博客网 时间:2024/05/29 11:03

java.time由5个包组成参考
- java.time – 包含值对象的基础包
- java.time.chrono – 提供对不同的日历系统的访问
- java.time.format – 格式化和解析时间和日期
- java.time.temporal – 包括底层框架和扩展特性
- java.time.zone – 包含时区支持的类

基本API

日期 LocalDate

LocalDate是其中最重要的类之一。它是表示日期的不可变类型,不包含时间和时区。

LocalDate date = LocalDate.of(2014, Month.JUNE, 10);int year = date.getYear(); // 2014年Month month = date.getMonth(); // 6月int dom = date.getDayOfMonth(); // 10DayOfWeek dow = date.getDayOfWeek(); // 星期二int len = date.lengthOfMonth(); // 30 (6月份的天数)boolean leap = date.isLeapYear(); // false (不是闰年)

由于LocalDate是不可变类型,每次操作都会产生一个新的实例,而原有实例不收任何影响。

LocalDate date = LocalDate.of(2014, Month.JUNE, 10);date = date.withYear(2015); // 2015-06-10date = date.plusMonths(2); // 2015-08-10date = date.minusDays(1); // 2015-08-09

时间 LocalTime

LocalTime是值类型,且跟日期和时区没有关联。当我们对时间进行加减操作时,以午夜基准,24小时一个周期。因此,20:00加上6小时,结果就是02:00。

LocalTime time = LocalTime.of(20, 30);int hour = date.getHour(); // 20int minute = date.getMinute(); // 30time = time.withSecond(6); // 20:30:06time = time.plusMinutes(3); // 20:33:06

时间和日期组合LocalDateTime

LocalDateTime是LocalDate和LocalTime的简单组合。它表示一个跟时区无关的日期和时间。LocalDateTime可以直接创建,或者组合时间和日期:

LocalDateTime dt1 = LocalDateTime.of(2014, Month.JUNE, 10, 20, 30);LocalDateTime dt2 = LocalDateTime.of(date, time);LocalDateTime dt3 = date.atTime(20, 30);LocalDateTime dt4 = date.atTime(time);

LocalDateTime的其他方法跟LocalDate和LocalTime相似。下面总结了用到的方法前缀:

方法前缀 详细信息 of 静态工厂方法,从组成部分中创建实例 from 静态工厂方法,尝试从相似对象中提取实例。from()方法没有of()方法类型安全 now 静态工厂方法,用当前时间创建实例 parse 静态工厂方法,总字符串解析得到对象实例 get 获取时间日期对象的部分状态 is 检查关于时间日期对象的描述是否正确 with 返回一个部分状态改变了的时间日期对象拷贝 plus 返回一个时间增加了的、时间日期对象拷贝 minus 返回一个时间减少了的、时间日期对象拷贝 to 把当前时间日期对象转换成另外一个,可能会损失部分状态 at 用当前时间日期对象组合另外一个,创建一个更大或更复杂的时间日期对象 format 提供格式化时间日期对象的能力

时间点Instant

Instant表示自1970年1月1日0时0分0秒(UTC)开始的秒数。用于机器可读的时间存储。Instant的精度可以达到纳秒级。

Instant start = Instant.now();// perform some calculationInstant end = Instant.now();assert end.isAfter(start);

时间修改器TemporalAdjuster

时间修改器TemporalAdjuster类提供一个预装包的、能操纵日期的功能,比如根据月份的最后一天获取日期的对象。

//import static java.time.DayOfWeek.*//import static java.time.temporal.TemporalAdjusters.*LocalDate date = LocalDate.of(2014, Month.JUNE, 10);date = date.with(lastDayOfMonth());date = date.with(nextOrSame(WEDNESDAY));

时间长度Duration

Duration表示以秒和纳秒为基准的时长。例如,“23.6秒”。Period表示以年、月、日衡量的时长。例如,“3年2个月零6天”。它们可以作为参数,传给主要的时间/日期类的增加或减少时间的方法:

Period sixMonths = Period.ofMonths(6);LocalDate date = LocalDate.now();LocalDate future = date.plus(sixMonths);

解析和格式化DateTimeFormatter

DateTimeFormatter是最通用的创建格式化器的方式。包括:

  • 常用ISO格式常量,如ISO_LOCAL_DATE
  • 字母模式,如ofPattern(“dd/MM/uuuu”)
  • 本地化样式,如ofLocalizedDate(FormatStyle.MEDIUM)
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MM/uuuu");LocalDate date = LocalDate.parse("24/06/2014", f);String str = date.format(f);

时间比较

//时间大小dayOne.isBefore(dayTwo);//时间差long between = ChronoUnit.MONTHS.between(dayOne, dayTwo);

新旧版本兼容参考

//java.util.Date转LocalDate;Date input = new Date();LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
JDK8类 From JDK8 to JDK8 JDK7类 java.time.Instant java.util.Date Date.from(instant) date.toInstant() java.time.Instant java.sql.Timestamp Timestamp.from(instant) ts.toInstant() java.time.Instant java.nio.file.attribute.FileTime FileTime.from(instant) fileTime.toInstant() ZonedDateTime java.util.GregorianCalendar GregorianCalendar.from(zonedDateTime) cal.toZonedDateTime() LocalDate java.sql.Time Date.valueOf(localDate) date.toLocalDate() java.time.LocalTime java.sql.Time Date.valueOf(localDate) date.toLocalTime() LocalDateTime java.sql.Timestamp Timestamp.valueOf(localDateTime) ts.toLocalDateTime() java.time.ZoneId java.util.TimeZone Timezone.getTimeZone(id) timeZone.toZoneId() DateTimeFormatter java.text.DateFormat formatter.toFormat() 无

更多资料

官方文档:http://docs.oracle.com/javase/tutorial/datetime/TOC.html

阅读全文
0 0
原创粉丝点击