一 我们为什么要学习 java.timeAPI

原先的Date and Calendar 类的api比较复杂,不易于理解,应用起来不是很灵活。

Calendar 是个线程不安全的类会导致SimpleDateFormat线程不安全。

java.time是JSR 310: Date and Time API.规范所开发,其所有类都是线程安全的或者是枚举类型的类

java.time 的API 使用简单,能够灵活计算时间,矫正时间。

二 LocalDate

LocalDate 是 日期,在java.time 中 日期和时间是可以分开和组合的。

2.1 创建date的方式

// 创建date的方式

@Test

public void LocalDateTest(){

// 1当前日期 常用

LocalDate now = LocalDate.now();

System.out.println(now);//2019-10-27

// 2指定年月 日 方式 常用

LocalDate ofDate = LocalDate.of(2018, 8, 8);

System.out.println(ofDate);//2018-08-08

// 3使用Clock方式创建 不常用

Clock clock = Clock.systemDefaultZone();

LocalDate date = LocalDate.now(clock);

System.out.println(date);// 2019-10-27

// 4 指定年份 和 一年的天数进行创建

LocalDate localDate = LocalDate.ofYearDay(2018, 256);

System.out.println(localDate);// 2018-09-13

}

2.2 使用LocalDate读取date

@Test

public void LocalDateTest2(){

// 创建时间

LocalDate date = LocalDate.of(2019,10,27);

// 获得年份 2019

date.getYear();

System.out.println(date.getYear());

// 获得一个月中的第几天 27

date.getDayOfMonth();

System.out.println(date.getDayOfMonth());

// 获得星期 SUNDAY

date.getDayOfWeek();

System.out.println(date.getDayOfWeek());

// 获得一年中的第几天 300

date.getDayOfYear();

System.out.println(date.getDayOfYear());

// 获得月份值 10

date.getMonthValue();

System.out.println(date.getMonthValue());

// 获得月份长度 31

date.lengthOfMonth();

System.out.println(date.lengthOfMonth());

// 是否是闰年 false

date.isLeapYear();

System.out.println(date.isLeapYear());

}

2.3 TemporalField 读取 LocalDate 的值

ChronoField 是个枚举其实现了TemporalField接口,除了2.2的方式读取date我们还可以使用ChronoField方式读取date.

// 使用 TemporalField 读取 LocalDate 的值

@Test

public void LocalDateTest3() {

// 创建时间

LocalDate date = LocalDate.of(2019, 10, 27);

// 获得年份 2019

date.get(ChronoField.YEAR);

System.out.println(date.get(ChronoField.YEAR));

// 获得月份 10

date.get(ChronoField.MONTH_OF_YEAR);

System.out.println(date.get(ChronoField.MONTH_OF_YEAR));

// 获得这个月中的第几天 27

date.get(ChronoField.DAY_OF_MONTH);

System.out.println(date.get(ChronoField.DAY_OF_MONTH));

// 获得这个星期的第几天 7

date.get(ChronoField.DAY_OF_WEEK);

System.out.println(date.get(ChronoField.DAY_OF_WEEK));

// 其他不再举例自行研究都是字面意思很好理解

}

2.4 解析LocalDate

@Test

public void LocalDateParse(){

// 默认支持格式解析

String dateStr = "2019-10-27";

LocalDate parse = LocalDate.parse(dateStr);

System.out.println(parse);//2019-10-27

// 指定格式解析

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

LocalDate date = LocalDate.parse("2019/10/27", dateTimeFormatter);

System.out.println(date);//2019-10-27

}

2.5 使用 Period 操纵 date

获得连个日期之间的差值,可以获得年,月,日,判断是否非0等等。

@Test

public void LocalDatePor(){

LocalDate date1 = LocalDate.of(2019, 10, 27);

LocalDate date2 = LocalDate.of(2019, 10, 25);

Period between = Period.between(date2, date1);

System.out.println(between.getDays());// 2

}

2.6 修改date

通过withAttribute修改不会改变原来的date,会在原来date的基础上形成新的LocalDate副本。

// 修改

@Test

public void LocalDateWith(){

LocalDate date1 = LocalDate.of(2019, 10, 27);

LocalDate date2 = date1.withMonth(9);//2019-09-27

System.out.println(date2);

LocalDate date3 = date2.withYear(2018);//2018-09-27

System.out.println(date3);

// 2019-10-27

System.out.println(date1);

}

2.7 使用 TemporalAdjuster 修改日期

TemporalAdjuster 时间矫正器修改时间也是不会改变原来的date,会新生成LocalDate 副本,相比于withAttribute,其API更加丰富,提供大量的静态工厂方法,能满足我们日常开发需求。

// TemporalAdjuster youku1327

@Test

public void LocalDateTemporalAdjuster(){

LocalDate date1 = LocalDate.of(2019, 10, 27);

LocalDate date2 = date1.with(TemporalAdjusters.firstDayOfMonth());

// 2019-10-01

System.out.println(date2);

LocalDate date3 = date1.with(TemporalAdjusters.firstDayOfYear());

// 2019-01-01

System.out.println(date3);

LocalDate date4 = date1.with(TemporalAdjusters.lastDayOfYear());

// 2019-12-31

System.out.println(date4);

}

三LocalTime

如果你已经掌握了上述的LocalDate的基本用法,那么学习LocalTime也是十分简单,原因是LocalTime和LocalDate的API基本差不多。

3.1 创建LocalTime

@Test

public void localTimeTest1(){

// 1当前时间

LocalTime now = LocalTime.now();

System.out.println(now);//22:49:03.360

// 2指定时间

LocalTime of = LocalTime.of(22, 47);

System.out.println(of);//22:47

}

3.2 读取时间

@Test

public void localTimeRead(){

// 1指定时间

LocalTime tiem = LocalTime.of(22, 50);

// 小时

int hour = tiem.getHour();

// 分钟

int minute = tiem.getMinute();

// 秒

int second = tiem.getSecond();

// 纳秒

int nano = tiem.getNano();

}

3.3 时间解析

// 解析时间

@Test

public void localTimeParse(){

// 默认支持格式解析

LocalTime parse = LocalTime.parse("22:50:00");

System.out.println(parse);// 22:50

// 指定格式解析

LocalTime time = LocalTime.parse("22:50:00", DateTimeFormatter.ISO_TIME);

System.out.println(time);// 22:50

}

3.4 时间修改

//

@Test

public void localTime(){

// 1时间

LocalTime time = LocalTime.of(22, 50);

LocalTime time1 = time.withHour(2);//02:50

System.out.println(time1);

LocalTime time2 = time.withMinute(10);//22:10

System.out.println(time2);

}

3.5 使用Duration获得时间差值

@Test

public void localTime(){

LocalTime time1 = LocalTime.of(22, 50,20,20);

LocalTime time2 = LocalTime.of(23, 10);

// 差值

Duration duration = Duration.between(time1, time2);

long seconds = duration.getSeconds();

int nano = duration.getNano();

System.out.println(seconds);//1179

System.out.println(nano);//999999980

}

四 LocalDate 和 LocalTime 的相互合并和转换

LocalDate 和 LocalTime 能相互合并成 LocalDateTime ,LocalDateTime 也可以转为 LocalDate 或者 LocalTime。

LocalDateTime其他的API 跟 LocalTime,LocalDate 差不多,在次不赘述。

// youku1327 谢谢 lsc

@Test

public void LocalDateTimeTest(){

LocalDate date = LocalDate.of(2019, 10, 27);

LocalTime time = LocalTime.of(23, 20, 00);

// 合并为 LocalDateTime

LocalDateTime localDateTime = LocalDateTime.of(date, time);

System.out.println(localDateTime);//2019-10-27T23:20

// 转为LocalDate

LocalDate localDate = localDateTime.toLocalDate();

System.out.println(localDate);//2019-10-27

// 转为 LocalTime

LocalTime localTime = localDateTime.toLocalTime();

System.out.println(localTime);// 23:20

}

五 ZoneId

java8中 java.time.ZoneId代替了老版本java.util.TimeZone 。

5.1 时区偏移

默认是当前时区和UTC /格林威治的固定偏差值

@Test

public void TimeZoneId(){

// 上海

ZoneId shanghai = ZoneId.of("Asia/Shanghai");

LocalDate date = LocalDate.of(2019, 10, 27);

// 设置时区

ZonedDateTime zonedDateTime = date.atStartOfDay(shanghai);

// 获得偏移

ZoneOffset offset = zonedDateTime.getOffset();

System.out.println(offset);//+08:00

}

5.2 TimeZone 转 ZoneId

@Test

public void TimeZoneId2(){

ZoneId zoneId = TimeZone.getDefault().toZoneId();

String id = zoneId.getId();

System.out.println(id);//Asia/Shanghai

}

5.3 时区时间计算

@Test

public void TimeZoneId3(){

ZoneId zoneId = ZoneId.of("America/Chicago");

Instant instant = Instant.now();

// 上海时间 2019-10-27T23:51:27.168

System.out.println(LocalDateTime.ofInstant(instant,ZoneId.of("Asia/Shanghai")));

ZonedDateTime zonedDateTime = instant.atZone(zoneId);

ZoneOffset offset = zonedDateTime.getOffset();

// 美国芝加哥离上海时区差值 -05:00

System.out.println(offset);

LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();

// 芝加哥时间

System.out.println(localDateTime);//2019-10-27T10:51:27.168

}

java date time_java8-date和timeAPI相关推荐

  1. Java 实现日期 Date 的赋值

    关键的语句也就三句话: (1) SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");   (2) Da ...

  2. java中时间入数据库格式转换_数据库中字段类型为datetime,转换成java中的Date类型...

    数据类型对照 点击打开链接 JDBC: PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuer ...

  3. JAVA复习(date)

    Date    java.util(重点)    java.sql(数据库编程 JDBC Date 一般不用) Date类的定义如下: public class Date extends Object ...

  4. JAVA基础——时间Date类型转换

    在java中有六大时间类,分别是: 1.java.util包下的Date类, 2.java.sql包下的Date类, 3.java.text包下的DateFormat类,(抽象类) 4.java.te ...

  5. java 中String ,Date,long 和Timestamp类型的转换

    一.String与Date(java.util.Date)的转换 1.String--->Date String str="2014/1/11 12:34:25"; Date ...

  6. Java String和Date的转换 Date类型操作

    String->Date String dateString = "2012-12-06 "; try {SimpleDateFormat sdf = new SimpleD ...

  7. java对日期Date类进行加减运算、年份加减,月份加减

    JAVA处理日期时间常用方法: 1.Java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字 ...

  8. java calendar 转换_[java]转:String Date Calendar之间的转换

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...

  9. java时间差的百分之二十,Java对日期Date类进行加减运算、年份加减月份加减、时间差等等...

    实现代码一: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public c ...

  10. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

最新文章

  1. 快速部署RDA Remote Diagnostic Agent
  2. Hadoop MapReduce工作详细流程(Partitioner/SortComparator/GroupingComparator)
  3. pytorch常用函数API简析与汇总——以备查询
  4. JavaScript中Window.event详解
  5. linux 运维基础问题_Linux基础能力问题和解答
  6. Apollo进阶课程 ⑦ | 高精地图的采集与生产
  7. 不可重入锁和可重入锁
  8. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数
  9. freeswitch被外国IP攻击盗打的防护措施
  10. Python TimedRotatingFileHandler 修改suffix后无法自动删除文件
  11. 通过Wachete实时监控网站更新
  12. 100个思维模型(不一定都适用,各取所需)
  13. php x forwarded for,代码审计树洞X_FORWARDED_FOR注入
  14. 汉诺塔python代码解释_python求解汉诺塔游戏
  15. 【AES】基于FPGA的128位AES加解密系统设计实现
  16. 多多情报通:拼多多推广账户金额可以通用吗?里面钱可以提出来吗?
  17. 奥密克戎“后遗症”,比病毒更可怕
  18. psp模拟器linux,PSP模拟器PPSSPP 1.7 发布,兼容性和错误修正
  19. 【Appium】逍遥模拟器命令memuc功能大全【命令启动】
  20. java poi写入excel_Java使用POI读取和写入Excel指南

热门文章

  1. 透镜畸变和畸变校准(OpenCV)
  2. 清华学堂 LightHouse
  3. 访问 Linux 服务器上的文件(以图片为例)
  4. 给大家总结一个海淘Thinkpad的流程、注意事项和常见问题
  5. 最优化计算方法(刘浩洋)本科生学习数学基础矩阵论部分
  6. 利用Bettercap实现密码的嗅探
  7. EXCEL09:数据透视
  8. PDF文件加密怎么转换成word
  9. 5G 的三大应用场景——ITU-R原文
  10. Laputa在cnblogs