Instant——它代表的是时间戳

LocalDate——不包含具体时间的日期,比如 2020-01-14。它可以用来存储生日,周年纪念日,入职日期等。

LocalTime——它代表的是不含日期的时间

LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。

ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以 UTC / 格林威治时间为基准的。

Java 8 是如何处理时间及日期的

示例 1 如何 在 Java 8 中获取当天的日期

LocalDate today = LocalDate.now();

System.out.println("Today's Local date : " + today);

Output

Today's Local date : 2020-01-14

示例 2 如何在 Java 8 中获取当前的年月日

LocalDate today = LocalDate.now();

int year = today.getYear();

int month = today.getMonthValue();

int day = today.getDayOfMonth();

System.out.printf("Year : %d Month : %d day : %d \t %n", year, month, day);

Output

Today's Local date : 2020-01-14

Year : 2020 Month : 1 day : 14

示例 3 在 Java 8 中如何获取某个特定的日期

LocalDate dateOfBirth = LocalDate.of(2010, 01, 14);

System.out.println("Your Date of birth is : " + dateOfBirth);

Output : Your Date of birth is : 2010-01-14

示例 4 在 Java 8 中如何检查两个日期是否相等

LocalDate date1 = LocalDate.of(2020, 01, 14); if(date1.equals(today)){

System.out.printf("Today %s and date1 %s are same date %n", today, date1);

}

Output

today 2020-01-14 and date1 2020-01-14 are same date

示例 5 在 Java 8 中如何检查重复事件,比如说生日

LocalDate dateOfBirth = LocalDate.of(2010, 01, 14);

MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth());

MonthDay currentMonthDay = MonthDay.from(today);

if(currentMonthDay.equals(birthday)){

System.out.println("Many Many happy returns of the day !!");

}else{

System.out.println("Sorry, today is not your birthday");

}

Output: Many Many happy returns of the day !!

示例 6 如何在 Java 8 中获取当前时间

LocalTime time = LocalTime.now();

System.out.println("local time now : " + time);

Output

local time now : 16:33:33.369 // in hour, minutes, seconds, nano seconds

示例 7 如何增加时间里面的小时数

LocalTime time = LocalTime.now();

LocalTime newTime = time.plusHours(2); // adding two hours

System.out.println("Time after 2 hours : " + newTime);

Output :

Time after 2 hours : 18:33:33.369

示例 8 如何获取 1 周后的日期

LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);

System.out.println("Today is : " + today);

System.out.println("Date after 1 week : " + nextWeek);

Output:

Today is : 2020-01-14

Date after 1 week : 2020-01-21

示例 9 一年前后的日期

LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);

System.out.println("Date before 1 year : " + previousYear);

LocalDate nextYear = today.plus(1, YEARS);

System.out.println("Date after 1 year : " + nextYear);

Output:

Date before 1 year : 2019-01-14

Date after 1 year : 2021-01-14

示例 10 在 Java 8 中使用时钟

// Returns the current time based on your system clock and set to UTC.

Clock clock = Clock.systemUTC();

System.out.println("Clock : " + clock);

// Returns time based on system clock zone Clock defaultClock =

Clock.systemDefaultZone();

System.out.println("Clock : " + clock);

Output:

Clock : SystemClock[Z]

Clock : SystemClock[Z]

public class MyClass {

private Clock clock; // dependency inject ...

public void process(LocalDate eventDate) {

if(eventDate.isBefore(LocalDate.now(clock)) {

...

}

}

}

示例 11 在 Java 中如何判断某个日期是在另一个日期的前面还是后面

LocalDate tomorrow = LocalDate.of(2020, 1, 15);

if(tommorow.isAfter(today)){

System.out.println("Tomorrow comes after today");

}

LocalDate yesterday = today.minus(1, DAYS);

if(yesterday.isBefore(today)){

System.out.println("Yesterday is day before today");

}

Output:

Tomorrow comes after today

Yesterday is day before today

示例 12 在 Java 8 中处理不同的时区

// Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York");

LocalDateTime localtDateAndTime = LocalDateTime.now();

ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america );

System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork);

Output :

Current date and time in a particular timezone : 2020-01-14T16:33:33.373-05:00[America/New_York]

Exception in thread "main" java.time.zone.ZoneRulesException: Unknown time-zone ID: ASIA/Tokyo

at java.time.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:272)

at java.time.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:227)

at java.time.ZoneRegion.ofId(ZoneRegion.java:120)

at java.time.ZoneId.of(ZoneId.java:403)

at java.time.ZoneId.of(ZoneId.java:351)

示例 13 如何表示固定的日期,比如信用卡过期时间

YearMonth currentYearMonth = YearMonth.now();

System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth());

YearMonth creditCardExpiry = YearMonth.of(2018, Month.FEBRUARY);

System.out.printf("Your credit card expires on %s %n", creditCardExpiry);

Output:

Days in month year 2020-01: 31

Your credit card expires on 2018-02

示例 14 如何在 Java 8 中检查闰年

if(today.isLeapYear()){

System.out.println("This year is Leap year");

}else {

System.out.println("2020 is not a Leap year");

}

Output: 2020 is not a Leap year

示例 15 两个日期之间包含多少天,多少个月

LocalDate java8Release = LocalDate.of(2020, Month.MARCH, 14);

Period periodToNextJavaRelease = Period.between(today, java8Release);

System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths() );

Output:

Months left between today and Java 8 release : 2

示例 16 带时区偏移量的日期与时间

LocalDateTime datetime = LocalDateTime.of(2020, Month.JANUARY, 14, 19, 30);

ZoneOffset offset = ZoneOffset.of("+05:30");

OffsetDateTime date = OffsetDateTime.of(datetime, offset);

System.out.println("Date and Time with timezone offset in Java : " + date);

Output :

Date and Time with timezone offset in Java : 2020-01-14T19:30+05:30

示例 17 在 Java 8 中如何获取当前时间戳

Instant timestamp = Instant.now();

System.out.println("What is value of this instant " + timestamp);

Output :

What is value of this instant 2020-01-14T08:33:33.379Z

示例 18 如何在 Java 8 中使用预定义的格式器来对日期进行解析 / 格式化

String dayAfterTommorrow = "20200116";

LocalDate formatted = LocalDate.parse(dayAfterTommorrow,

DateTimeFormatter.BASIC_ISO_DATE);

System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted);

Output :

Date generated from String 20200116 is 2020-01-16

示例 19 如何在 Java 中使用自定义的格式器来解析日期

String goodFriday = "Apr 18 2020";

try {

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy");

LocalDate holiday = LocalDate.parse(goodFriday, formatter);

System.out.printf("Successfully parsed String %s, date is %s%n", goodFriday, holiday);

} catch (DateTimeParseException ex) {

System.out.printf("%s is not parsable!%n", goodFriday);

ex.printStackTrace();

}

Output :

Successfully parsed String Apr 18 2020, date is 2020-04-18

示例 20 如何在 Java 8 中对日期进行格式化,转换成字符串

LocalDateTime arrivalDate = LocalDateTime.now();

try {

DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm a");

String landing = arrivalDate.format(format);

System.out.printf("Arriving at : %s %n", landing);

} catch (DateTimeException ex) {

System.out.printf("%s can't be formatted!%n", arrivalDate);

ex.printStackTrace();

}

Output : Arriving at : Jan 14 2020 04:33 PM

示例 21获取时间戳秒和毫秒

Instant ins= Instant.now();

System.out.println("10位 秒"+ins.getEpochSecond());

System.out.println("13位 毫秒"+ins.toEpochMilli());

Java 8 中日期与时间 API 的几个关键点

它提供了 javax.time.ZoneId 用来处理时区。

它提供了 LocalDate 与 LocalTime 类

Java 8 中新的时间与日期 API 中的所有类都是不可变且线程安全的,这与之前的 Date 与 Calendar API 中的恰好相反,那里面像 java.util.Date 以及 SimpleDateFormat 这些关键的类都不是线程安全的。

新的时间与日期 API 中很重要的一点是它定义清楚了基本的时间与日期的概念,比方说,瞬时时间,持续时间,日期,时间,时区以及时间段。它们都是基于 ISO 日历体系的。

每个 Java 开发人员都应该至少了解这套新的 API 中的这五个类:

Instant 它代表的是时间戳,比如 2020-01-14T02:20:13.592Z,这可以从 java.time.Clock 类中获取,像这样: Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();

LocalDate 它表示的是不带时间的日期,比如 2020-01-14。它可以用来存储生日,周年纪念日,入职日期等。

LocalTime – 它表示的是不带日期的时间

LocalDateTime – 它包含了时间与日期,不过没有带时区的偏移量

ZonedDateTime – 这是一个带时区的完整时间,它根据 UTC / 格林威治时间来进行时区调整

这个库的主包是 java.time,里面包含了代表日期,时间,瞬时以及持续时间的类。它有两个子 package,一个是 java.time.foramt,这个是什么用途就很明显了,还有一个是 java.time.temporal,它能从更低层面对各个字段进行访问。

时区指的是地球上共享同一标准时间的地区。每个时区都有一个唯一标识符,同时还有一个地区 / 城市 (Asia/Tokyo) 的格式以及从格林威治时间开始的一个偏移时间。比如说,东京的偏移时间就是 + 09:00。

OffsetDateTime 类实际上包含了 LocalDateTime 与 ZoneOffset。它用来表示一个包含格林威治时间偏移量(+/- 小时:分,比如 + 06:00 或者 -08:00)的完整的日期(年月日)及时间(时分秒,纳秒)。

DateTimeFormatter 类用于在 Java 中进行日期的格式化与解析。与 SimpleDateFormat 不同,它是不可变且线程安全的,如果需要的话,可以赋值给一个静态变量。DateTimeFormatter 类提供了许多预定义的格式器,你也可以自定义自己想要的格式。当然了,根据约定,它还有一个 parse() 方法是用于将字符串转换成日期的,如果转换期间出现任何错误,它会抛出 DateTimeParseException 异常。类似的,DateFormatter 类也有一个用于格式化日期的 format() 方法,它出错的话则会抛出 DateTimeException 异常。

再说一句,“MMM d yyyy”与 “MMm dd yyyy” 这两个日期格式也略有不同,前者能识别出”Jan 2 2020″与”Jan 14 2020″这两个串,而后者如果传进来的是”Jan 2 2020″则会报错,因为它期望月份处传进来的是两个字符。为了解决这个问题,在天为个位数的情况下,你得在前面补 0,比如”Jan 2 2020″应该改为”Jan 02 2020″。

总结

到此这篇关于Java 8新时间日期库java.time使用的文章就介绍到这了,更多相关Java 8新时间日期库java.time内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

java怎么给时间赋值_Java 8新时间日期库java.time的使用示例相关推荐

  1. java 反射创建对象并赋值_java使用反射创建并操作对象的方法

    Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...

  2. Java 8 新的时间日期库java.time

    Instant--它代表的是时间戳 LocalDate--不包含具体时间的日期,比如 2020-01-14.它可以用来存储生日,周年纪念日,入职日期等. LocalTime--它代表的是不含日期的时间 ...

  3. Java 8新的时间日期库的20个使用示例

    Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API.Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java ...

  4. java时间设置_JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

  5. JAVA时间类及java8新时间类

    文章目录 java.util.Date 时区 java.util.Date基本使用 初始化 输出时间 输出时差 打印毫秒数 比较时间 java.util.Date的子类 java.sql.Date的使 ...

  6. java 给static变量赋值_java static变量可以赋值吗?

    java static变量可以赋值吗? 可以赋值的.static的主要作用是静态成员,指该变量的实例在内存中之存放一次.赋值是可以随便改的. java中static关键字 static是java中非常 ...

  7. java获取当前时间比较_java获取当前时间和时间比较大小

    A获取当前时间: Java代码 import java.text.SimpleDateFormat; import java.util.Date; public class GetCurrentTim ...

  8. java calendar去掉时分秒_java 8:只取年月日的java.util.Date(时分秒清零)对象

    废弃的方法(@Deprecated) 如果不想要java.util.Date中的时分秒数据,希望将它清零,只保留年月日,最简单的办法是 调用setHours,setMinutes,setSeconds ...

  9. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)...

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

最新文章

  1. .NET中使用OracleHelper
  2. flannel 概述 - 每天5分钟玩转 Docker 容器技术(58)
  3. 【机器学习基础】机器学习模型的度量选择(下)
  4. Python解析XML文件
  5. R 语言 相关入门资料
  6. 山东鲁能轨道智能巡检机器人_温湿度传感器在轨道巡检机器人中的应用
  7. HP 1218 无线设置
  8. Linux的文件权限与目录设置
  9. 利用扩展双屏技术及Chrome浏览器,快速剖析优秀网页Div及CSS构成,并高效实现原型创作
  10. matlab里转置det,matlab矩阵转置命令
  11. unity 光探头_光探头
  12. WaitHandles 的数目必须少于或等于 64 个
  13. 1.Series和DataFrame
  14. zigbee CC2530 系列教程 8 AD采集内部温度实验
  15. python mysqldb 安装_python MySQLdb安装和使用
  16. 闲谈IPv6-Anycast以及在Linux/Win7系统上的Anycast配置
  17. 2019 My excel
  18. Linux内核4.14版本——alsa框架分析(8)-ASoC(Codec)
  19. 全国计算机二级考试设置地点,黑龙江2020年3月全国计算机等级考试考点设置
  20. 【老李的模拟赛】【#4】【2014-08-09】

热门文章

  1. php mysql仿微信朋友圈评论表设计_PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)...
  2. Proxy error: Could not proxy request /***/***/*** from localhost:8080 to http://000.000.000/. 的解决办法
  3. 赛扬处理器_有问有答:怎么认识电脑处理器的划分?比如英特尔i5i7这些代表什么意思?...
  4. 企业发放的奖金根据企业的当年利润决定。当利润I低于或等于100元时,奖金可提成10%;利润大于100元,小于200元(100<I≤200)时,低于100元的部分按10%提成,高于100元的部分,可提成
  5. 三个著名加密算法(MD5、RSA、DES)的解析二
  6. Hbase 命令:快照操作
  7. 梦幻物价稳定的服务器,天元组知名老区,物价低新老玩家活跃!——梦幻西游服务器调研:玉皇顶...
  8. 分库分表原因,分库分表的方式,分库分表带来的问题
  9. python tuple用处_python tuple有什么用
  10. WOW,最近超火3D样机资源!看这里!