博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8 日期时间类
阅读量:4295 次
发布时间:2019-05-27

本文共 7438 字,大约阅读时间需要 24 分钟。

  • Instant:瞬时实例。
  • LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。
  • LocalTime:本地时间,不包含日期。
  • LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
  • ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。
    新API还引入了 ZoneOffSet 和 ZoneId 类,使得解决时区问题更为简便。解析、格式化时间的 DateTimeFormatter 类也全部重新设计。

常用API

LocalDate

获取年月日:

getYear,getMonthValue,getDayOfMonth

生成特定日期:

LocalDate.of(2018, 01, 21);

判断日期相等:

date1.equals(date2)

比较日期先后:

isBefore() 和 isAfter()

检查闰年:

today.isLeapYear()

格式化:

LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE);

MonthDay和YearMonth

只包含月日或者年月的类,是不可变并且线程安全的值类型。

可以用来判断不同日期所在的月日或者年月是否相等:

MonthDay day1= MonthDay.of(date1.getMonth(), date1.getDayOfMonth());MonthDay day2= MonthDay.from(date2);boolean eq = day1.equals(day2);YearMonth.now().lengthOfMonth(); // 获取当前月的天数YearMonth month = YearMonth.of(2028, Month.FEBRUARY); // 生成年月对象

LocalTime

只有时间没有日期,默认的格式是hh:mm:ss:nnn。

加时:
这些方法返回一个全新的LocalTime实例

LocalTime time = LocalTime.now();LocalTime newTime = time.plusHours(2); // 增加两小时

ChronoUnit 时间单位

枚举类,包含年月日时分秒毫秒等枚举值,可以结合LocalDate和LocalTime等类修改时间:

LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);    // 一周后的日期LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); // 一年前的今天

Clock时钟类

用于获取当前时间戳:

Clock clock = Clock.systemUTC();System.out.println(clock.millis());

Period 时间间隔

Period period= Period.between(date1, date2);int days = period.getDays();int months = period.getMonths();int years = period.getYears();
import java.time.Clock;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;import java.time.MonthDay;import java.time.OffsetDateTime;import java.time.ZoneOffset;import java.time.Period;import java.time.YearMonth;import java.time.ZoneId;import java.time.ZonedDateTime;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Date;public class DateTest {
//获取今天的日期 public void getCurrentDate(){
LocalDate today = LocalDate.now(); System.out.println("Today's Local date : " + today); //这个是作为对比 Date date = new Date(); System.out.println(date); } //获取年、月、日信息 public void getDetailDate(){
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); } //处理特定日期 public void handleSpecilDate(){
LocalDate dateOfBirth = LocalDate.of(2018, 01, 21); System.out.println("The specil date is : " + dateOfBirth); } //判断两个日期是否相等 public void compareDate(){
LocalDate today = LocalDate.now(); LocalDate date1 = LocalDate.of(2018, 01, 21); if(date1.equals(today)){
System.out.printf("TODAY %s and DATE1 %s are same date %n", today, date1); } } //处理周期性的日期 public void cycleDate(){
LocalDate today = LocalDate.now(); LocalDate dateOfBirth = LocalDate.of(2018, 01, 21); 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"); } } //获取当前时间 public void getCurrentTime(){
LocalTime time = LocalTime.now(); System.out.println("local time now : " + time); } //增加小时 public void plusHours(){
LocalTime time = LocalTime.now(); LocalTime newTime = time.plusHours(2); // 增加两小时 System.out.println("Time after 2 hours : " + newTime); } //如何计算一周后的日期 public void nextWeek(){
LocalDate today = LocalDate.now(); LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); System.out.println("Today is : " + today); System.out.println("Date after 1 week : " + nextWeek); } //计算一年前或一年后的日期 public void minusDate(){
LocalDate today = LocalDate.now(); LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); System.out.println("Date before 1 year : " + previousYear); LocalDate nextYear = today.plus(1, ChronoUnit.YEARS); System.out.println("Date after 1 year : " + nextYear); } public void clock(){
// 根据系统时间返回当前时间并设置为UTC。 Clock clock = Clock.systemUTC(); System.out.println("Clock : " + clock); // 根据系统时钟区域返回时间 Clock defaultClock = Clock.systemDefaultZone(); System.out.println("Clock : " + clock); } //如何用Java判断日期是早于还是晚于另一个日期 public void isBeforeOrIsAfter(){
LocalDate today = LocalDate.now(); LocalDate tomorrow = LocalDate.of(2018, 1, 29); if(tomorrow.isAfter(today)){
System.out.println("Tomorrow comes after today"); } LocalDate yesterday = today.minus(1, ChronoUnit.DAYS); if(yesterday.isBefore(today)){
System.out.println("Yesterday is day before today"); } } //时区处理 public void getZoneTime(){
//设置时区 ZoneId america = ZoneId.of("America/New_York"); LocalDateTime localtDateAndTime = LocalDateTime.now(); ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america ); System.out.println("现在的日期和时间在特定的时区 : " + dateAndTimeInNewYork); } //使用 YearMonth类处理特定的日期 public void checkCardExpiry(){
YearMonth currentYearMonth = YearMonth.now(); System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth()); YearMonth creditCardExpiry = YearMonth.of(2028, Month.FEBRUARY); System.out.printf("Your credit card expires on %s %n", creditCardExpiry); } //检查闰年 public void isLeapYear(){
LocalDate today = LocalDate.now(); if(today.isLeapYear()){
System.out.println("This year is Leap year"); }else {
System.out.println("2018 is not a Leap year"); } } //计算两个日期之间的天数和月数 public void calcDateDays(){
LocalDate today = LocalDate.now(); LocalDate java8Release = LocalDate.of(2018, Month.MAY, 14); Period periodToNextJavaRelease = Period.between(today, java8Release); System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths() ); } // 包含时差信息的日期和时间 public void ZoneOffset(){
LocalDateTime datetime = LocalDateTime.of(2018, Month.FEBRUARY, 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); } // 获取时间戳 public void getTimestamp(){
Instant timestamp = Instant.now(); System.out.println("What is value of this instant " + timestamp); } // 使用预定义的格式化工具去解析或格式化日期 public void formateDate(){
String dayAfterTommorrow = "20180210"; LocalDate formatted = LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE); System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted); } public static void main(String[] args) {
DateTest dt = new DateTest(); dt.formateDate(); }}

转载地址:http://hebws.baihongyu.com/

你可能感兴趣的文章
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
输出二叉树中随机两个结点的最小公共父结点
查看>>
C++单例模式的创建
查看>>
多态不能发生在父类的构造方法中
查看>>
C实现读取文件的每一行 并标号
查看>>
关于字符串和内存空间的一些知识
查看>>