Java8中18个日期处理方式

Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。

Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。

示例1: Java 8 中获取今天的日期

Java 8 中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。

package com.imocc.mall.test;

import java.time.LocalDate;

/**
 * Java 8 中的时间
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate today = LocalDate.now();
      System.out.println("今天的日期:" + today);

  }
}

输出结果为:

今天的日期:2020-01-16

 示例2 : Java 8 中获取年、月、日信息

package com.imocc.mall.test;

import java.time.LocalDate;

/**
 * 示例2:Java 8中获取年、月、日信息
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate today = LocalDate.now();
      int year = today.getYear();
      int month = today.getMonthValue();
      int day = today.getDayOfMonth();

      System.out.println("year:"+year);
      System.out.println("month:"+month);
      System.out.println("day:"+day);
  }
}

输出结果为:

year:2020
month:1
day:16

示例3:Java 8中处理特定日期

我们通过静态工厂方法now()非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等。

package com.imocc.mall.test;

import java.time.LocalDate;

/**
 * 示例2:Java 8中获取年、月、日信息
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate date = LocalDate.of(2020,1,16);

      System.out.println("自定义日期:"+date);
  }
}

输出结果为:

自定义日期:2020-01-16

示例4:Java 8 中判断两个日期是否相等

package com.imocc.mall.test;

import java.time.LocalDate;

/**
 * 示例4:Java 8中判断两个日期是否相等
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate date1 = LocalDate.now();
      LocalDate date2 = LocalDate.of(2018,2,5);

      if (date1.equals(date2)){
          System.out.println("日期相等");
      }else {
          System.out.println("日期不相等");
      }


  }
}

输出结果:

日期不相等

示例5:Java 8中检查像生日这种周期性事件

package com.imocc.mall.test;

import java.time.LocalDate;
import java.time.MonthDay;

/**
 * 示例5:Java 8中检查像生日这种周期性事件
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate date1 = LocalDate.now();
      LocalDate date2 = LocalDate.of(2018,1,16); //1月16 是生日

      MonthDay birthday = MonthDay.of(date2.getMonth(),date2.getDayOfMonth());
      MonthDay currentMonthDay = MonthDay.from(date1);

      if (currentMonthDay.equals(birthday)){
          System.out.println("是你的生日");
      }else {
          System.out.println("不是你的生日");
      }
  }
}

输出结果:

是你的生日

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

package com.imocc.mall.test;

import java.time.LocalDate;

/**
 * 示例14:如何在Java 8中检查闰年
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDate date = LocalDate.now();

      if (date.isLeapYear()){
          System.out.println("是闰年");
      }else {
          System.out.println("不是闰年");
      }
  }
}

输出结果:

是闰年

示例17:Java 8中如何使用预定义的格式化工具去解析或格式化日期

package com.imocc.mall.test;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * 示例17:Java 8中如何使用预定义的格式化工具去解析或格式化日期
 */
public class DateUtil {
  public static void main(String[] args) {
      String dayAfterTomorrow = "20200116";
      LocalDate formatted = LocalDate.parse(dayAfterTomorrow, DateTimeFormatter.BASIC_ISO_DATE);
      System.out.println(dayAfterTomorrow +"  格式化后的日期为:  "+formatted);
  }
}

输出结果:

20200116  格式化后的日期为:  2020-01-16

示例18:字符串互转日期类型

package com.imocc.mall.test;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 示例18:字符串互转日期类型
 */
public class DateUtil {
  public static void main(String[] args) {
      LocalDateTime date = LocalDateTime.now();
      DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

      //日期转字符串
      String str = date.format(format1);

      System.out.println("日期转换为字符串:" + str);

      DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

      //字符串转日期
      LocalDate date2 = LocalDate.parse(str,format2);
      System.out.println("日期类型:"+date2);
  }
}

输出结果:

日期转换为字符串:2020/01/16 15:07:33
日期类型:2020-01-16
原文地址:https://www.cnblogs.com/Edward-Wang/p/12201004.html