JAVA8新特性 - 时间API

前言

JAVA8的新特性之一就是DATE/TIME的改善,之前的时间API确实不够好用,JAVA8借鉴了Joda-Time的精华对旧的API进行了改善和升级API,正好最近工作中常常使用到时间,简单的记录一下java时间API的用法,不涉及非常高深的东西.

结构介绍

LocalTime

LocalTime 顾名思义就是介绍具体的时间的类.

创建时间对象
// current time 11:34:53.201
LocalTime currentTime = LocalTime.now();
//of重载了多个方法,可以根据自己的需求选择合适的方法
// 12:00
LocalTime midday = LocalTime.of(12, 0); 
// 13:10:15
LocalTime afterMidday = LocalTime.of(13, 10, 15);
// 10:00:01
LocalTime fromSecondsOfDay = LocalTime.ofSecondOfDay(36001);

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
获取时间的某一部分

接下来看一下如何通过LocalTime 对象获取具体的时分秒

//11
int hour = currentTime.getHour();
//34
int minute = currentTime.getMinute();
//53
int second = currentTime.getSecond();
//733
int nano = currentTime.getNano();
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

另外补充

  1. withXXX方法为通过改变当前时间的时或分或秒生成新时间
  2. plusXXX方法为在当前时间对象的基础上加多少小时或者多少分钟或者多少秒生成新时间
  3. minusXXX方法则为在当前时间对象的基础上减多少小时或者多少分钟或者多少秒生成新时间
格式化时间
//格式化时间 11:34:53.201
String basic = currentTime.format(DateTimeFormatter.ISO_LOCAL_TIME);
//12:00:00
String middayFormat = midday.format(DateTimeFormatter.ISO_LOCAL_TIME);
//自定义格式化时间 11:34:53
String custom = currentTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));

//解析时间
LocalTime basicTime = LocalTime.parse(basic);
//12:00
LocalTime middayParse = LocalTime.parse(middayFormat);
//自定义格式解析时间
LocalTime customTime = LocalTime.parse(custom, DateTimeFormatter.ofPattern("HH:mm:ss"));
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

我们不需要关系DateTimeFormatter只需要关心我们格式化和解析的格式就可以了,中间还添加不完整格式的时间进行格式化.

LocalDate

LocalDate顾名思义就是本地日期的类,用来专门处理日期相关的操作

创建日期
// the current date
LocalDate currentDate = LocalDate.now();

// 2017-11-25
LocalDate day1 = LocalDate.of(2017, Month.NOVEMBER, 25);

// 2014-05-11
LocalDate day2 = LocalDate.of(2014, 5, 11);

// 2010的第65天
LocalDate day3 = LocalDate.ofYearDay(2010, 65);
//1970-01-02 从1970的第一天加1天
LocalDate epochDay = LocalDate.ofEpochDay(1);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

修改日期

会生成新的日期,本演示结果省略

day1.withYear(1993);//修改年份并创建日期

day1.withMonth(3); //会自动更新天数越界的问题

day1.withDayOfYear(23);//年份不变,改为当前年的第23天

day1.withDayOfMonth(3);//当前月的第三天

day1.plusDays(3); //当前日期加3天

day1.plusYears(3);  //加3年

day1.plusWeeks(3);  //加3周

day1.plusMonths(3); //加三个月
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
获取日期
//=============================获取日期================================
int year = day1.getYear();//获取年份

Month month = day1.getMonth(); //获取月份 --为枚举类

int dayOfYear = day1.getDayOfYear(); //当前年的多少天

int dayOfMonth = day1.getDayOfMonth(); //当前月的多少天

DayOfWeek dayOfWeek = day1.getDayOfWeek(); //当前周的第几天 --枚举类
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
格式化日期

和格式化时间类似

String format = day1.format(DateTimeFormatter.ISO_LOCAL_DATE);
String customDate = day1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate parse = LocalDate.parse(format);
LocalDate.parse(customDate,DateTimeFormatter.ofPattern("yyyy-MM-dd"));
   
   
  • 1
  • 2
  • 3
  • 4

LocalDateTime

顾名思义就是具体的日期+时间的类,可以理解为localDate和localTime的结合体.

创建时间
// 当前日期+时间
LocalDateTime currentDateTime = LocalDateTime.now();

// 2017-10-12 12:30
LocalDateTime localDateTime1 = LocalDateTime.of(2017, 10, 12, 12, 30);

// 2014-11-4 12:10:05
LocalDateTime localDateTime2 = LocalDateTime.of(2014, Month.NOVEMBER, 4, 12, 10,5);

//日期+时间拼接
LocalDateTime localDateTime3= LocalDateTime.of(currentDate, currentTime);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
其他

也有和LocalDate和LocalTime类似的

  1. getXXX方法,包括年月日时分秒
  2. withXXX方法,更改局部生成新对象,包括年月日时分秒
  3. plusXXX方法,在当前的基础上加一定的时间
  4. minusXXX方法,当前时间基础上减一定的时间
  5. format和parse方法格式化对象

汇总

1.compareTo,isBefore,isAfter方法

比较两个对象的大小,三种类都有

2.三者的转换

//通过localDateTime获取localDate
LocalDate localDate = currentDateTime.toLocalDate();
//通过localDateTime获取localTime
LocalTime localTime = currentDateTime.toLocalTime();
//通过localTime+localDate生产localDateTime
LocalDateTime localDateTime4 = localDate.atTime(localTime);
LocalDateTime localDateTime5 = localTime.atDate(localDate);
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

TimeZone

时区的时间操作,将本地时间转化为对应时区的时间

ZoneId类 记录时区信息和转换时区的操作

ZonedDateTime berlinDateTime = ZonedDateTime.of(dateTime, ZoneId.of("Europe/Berlin"));
   
   
  • 1

TIMESTAMP

时间戳,在JAVA8中使用Instant作为时间戳类

//当前时间戳
Instant now = Instant.now();
// 1262334567秒转化为时间戳 
Instant.ofEpochSecond(1262334567);
//时间戳转成毫秒的数字
 long toEpochMillis = now.toEpochMilli();
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

他也有和localTime相类似的plus,minus,compareTo方法.

TimeStamp,Instant,Date的装换

Date date = Date.from(now);
Instant instant = date.toInstant();

Timestamp timestamp = Timestamp.from(now);
Instant instant1 = timestamp.toInstant();
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

结语

就简单的介绍到这里,当然java.time包下面还有很多其他的内容,可以自行去学习和研究使用.总之JAVA的time包极大的便利我们的日常对时间的需要!!!!

与君共勉!!!

        <link href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css" rel="stylesheet">
            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值