Java基础之:日期类

Java基础之:日期类

第一代日期类

  1. Date:精确到毫秒,代表特定的瞬间

  2. SimpleDateFormat:格式和解析日期的类

  3. SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化.

package class_Date;import java.util.Date;import java.text.ParseException;import java.text.SimpleDateFormat;​public class ClassTest_FirstDate {​    public static void main(String[] args) throws ParseException {​        Date d1 = new Date(); //获取当前系统时间        Date d2 = new Date(9234567); //通过指定毫秒数得到时间        System.out.println(d1.getTime()); //获取某个时间对应的毫秒数​        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");        String format = sdf.format(d1); // format:将日期转换成指定格式的字符串​        String s = "1996年01月01日 10:20:30 星期一";        Date parse = sdf.parse(s);  //parse方法会抛编译异常​    }}

日期格式化输出的时候,使用的字母是提前规定好了的。

第二代日期类

第二代日期类,主要就是 Calendar类(日历)。

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

package class_Date;import java.util.Calendar;public class ClassTest_SecondDate {    public static void main(String[] args) {                Calendar c = Calendar.getInstance(); // 创建日历类对象//比较简单,自由        //抽象类创建对象,但实际c的运行类型为其子类 GregorianCalendar                System.out.println(c);        System.out.println(c.getClass());   //GregorianCalendar                //获取日历对象的某个日历字段        System.out.println("年:" + c.get(Calendar.YEAR));        System.out.println("月:" + (c.get(Calendar.MONTH) + 1));        System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));        System.out.println("小时:" + c.get(Calendar.HOUR));        System.out.println("分钟:" + c.get(Calendar.MINUTE));        System.out.println("秒:" + c.get(Calendar.SECOND));                // Calender 没有专门的格式化方法,所以需要程序员自己来组合显示        System.out.println(                c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1)                 + "月" + c.get(Calendar.DAY_OF_MONTH) + "日");​    }}

第三代日期类

前面两代日期类的不足分析:

JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:

  1. 可变性:像日期和时间这样的类应该是不可变的。

  2. 偏移性:Date中的年份是从1900开始的,而月份都从0开始。

  3. 格式化:格式化只对Date有用,Calendar则不行。

  4. 此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。

第三代日期类简单使用

package class_Date;​import java.util.Date;import java.time.Instant;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;​public class ClassTest_ThirdDate {​    public static void main(String[] args) {        // 第三代日期的基本使用        LocalDateTime ldt = LocalDateTime.now(); // 日期时间对象//      LocalDate ldt = LocalDate.now();//LocalTime.now()//      System.out.println(ldt);​//      LocalTime ldt = LocalTime.now();//      System.out.println(ldt);        System.out.println(ldt.getYear());        System.out.println(ldt.getMonthValue());        System.out.println(ldt.getMonth());        System.out.println(ldt.getDayOfMonth());​        System.out.println(ldt.getHour());        System.out.println(ldt.getMinute());        System.out.println(ldt.getSecond());​        // 格式化        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");​        String myDate = dtf.format(ldt);        System.out.println(myDate);​        // Instant 和 Date        System.out.println("=========Instant 和 Date 相互转换============");        Instant now = Instant.now();        System.out.println(now);        Date date = Date.from(now);        Instant instant = date.toInstant();​    }​}

第三代日期类常见方法

  1. LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间)

    • 类似于Calendar

    • LocalDate只包含日期,可以获取日期字段

    • LocalTime只包含时间,可以获取时间字段

    • LocalDateTime包含日期+时间,可以获取日期和时间字段

  2. Instant

    • 类似于Date

    • 提供了一系列和Date类转换的方式

    • Instant——>Date:

    • Date date = Date.from(instant);

    • Date——>Instant:

    • Instant instant = date.toInstant();

  3. DateTimeFormatter格式日期类

    • 类似于SimpleDateFormat

    • DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);

    • String str = dtf.format(日期对象);

  4. 第三代日期类更多方法

    • LocalDateTime类

    • MonthDay类:检查重复事件

    • 是否是闰年

    • 增加日期的某个部分

    • 使用plus方法测试增加时间的某个部分

    • 使用minus方法测试查看一年前和一年后的日期

    • 测试时间戳类:Instant ,相当于以前的Date

    • 测试DateTimeFormatter

package class_Date;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.MonthDay;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.util.Date;import org.junit.Test;public class ClassTest_AllDateMethods {public static void main(String[] args) {// TODO Auto-generated method stub// new AllDateMethods().hi();// new AllDateMethods().hello();}// JUnit 测试单元// 1. 配置快捷键 alt + J// 2. 如果要运行某个 测试单元,就选中方法名或光标定位在方法名,在运行 Junit// 3. 如果不选,就运行,就把所有的测试单元都运行// 4.@Test,代表此方法是测试单元,可以单独运行测试@Testpublic void hi() {System.out.println("hi ");}@Testpublic void hello() {System.out.println("hello");}@Testpublic void testLocalDate() {// 获取当前日期(只包含日期,不包含时间)LocalDate date = LocalDate.now();System.out.println(date);// 获取日期的指定部分System.out.println("year:" + date.getYear());System.out.println("month:" + date.getMonth());System.out.println("day:" + date.getDayOfMonth());System.out.println("week:" + date.getDayOfWeek());// 根据指定的日期参数,创建LocalDate对象LocalDate of = LocalDate.of(2010, 3, 2);System.out.println(of);}// 测试LocalTime类@Testpublic void testLocalTime() {// 获取当前时间(只包含时间,不包含日期)LocalTime time = LocalTime.now();System.out.println(time);// 获取时间的指定部分System.out.println("hour:" + time.getHour());System.out.println("minute:" + time.getMinute());System.out.println("second:" + time.getSecond());System.out.println("nano:" + time.getNano());// 根据指定的时间参数,创建LocalTime对象LocalTime of = LocalTime.of(10, 20, 55);System.out.println(of);}// 测试LocalDateTime类@Testpublic void testLocalDateTime() { // 获取当前时间(包含时间+日期)LocalDateTime time = LocalDateTime.now();// 获取时间的指定部分 System.out.println("year:" + time.getYear());System.out.println("month:" + time.getMonthValue());System.out.println("day:" + time.getMonth());System.out.println("day:" + time.getDayOfMonth());System.out.println("hour:" + time.getHour());System.out.println("minute:" + time.getMinute());System.out.println("second:" + time.getSecond());System.out.println("nano:" + time.getNano());// 根据指定的时间参数,创建LocalTime对象LocalDateTime of = LocalDateTime.of(2020, 2, 2, 10, 20, 55);System.out.println(of);}@Testpublic void testMonthDay() {LocalDate birth = LocalDate.of(1994, 7, 14); // 生日MonthDay birthMonthDay = MonthDay.of(birth.getMonthValue(), birth.getDayOfMonth());LocalDate now = LocalDate.now(); // 当前日期MonthDay current = MonthDay.from(now);if (birthMonthDay.equals(current)) {System.out.println("今天生日");} else {System.out.println("今天不生日");}}// 判断是否为闰年@Testpublic void testIsLeapYear() {LocalDate now = LocalDate.now();System.out.println(now.isLeapYear());}// 测试增加日期的某个部分@Testpublic void testPlusDate() {LocalDate now = LocalDate.now(); // 日期// 3年前 的日期LocalDate plusYears = now.plusDays(-1);System.out.println(plusYears);}// 使用plus方法测试增加时间的某个部分// 时间范围判断@Testpublic void testPlusTime() {LocalTime now = LocalTime.now();// 时间LocalTime plusHours = now.plusSeconds(-500);System.out.println(plusHours);}// 使用minus方法测试查看一年前和一年后的日期@Testpublic void testMinusTime() {LocalDate now = LocalDate.now();LocalDate minus = now.minus(1, ChronoUnit.YEARS);// LocalDate minus2 = now.minusYears(1);System.out.println(minus);}// 测试时间戳类:Instant ,相当于以前的Date类@Testpublic void testInstant() {Instant now = Instant.now();System.out.println(now);// 与Date类的转换Date date = Date.from(now);System.out.println(date);Instant instant = date.toInstant();System.out.println(instant);}// 格式转换@Testpublic void testDateTimeFormatter() {DateTimeFormatter pattern = DateTimeFormatter.ofPattern("MM-dd yyyy HH:mm:ss");// 将字符串转换成日期LocalDateTime parse = LocalDateTime.parse("03-03 2017 08:40:50", pattern);System.out.println(parse);// 将日期转换成字符串//LocalDateTime parse = LocalDateTime.now();String format = pattern.format(parse);System.out.println(format);}}

  

(0)

相关推荐

  • Java时间操作类库—Joda-Time

    前言 上一周在做一个产品的需求的时候有个动态计算时间段(如现在是13:00,则时间段为15:10-17:10.17:10-19:10.19:10-21:10:即最早的出发时间为当前时间+参数[2h10 ...

  • Java基础知识点(常用类、集合)

    Java基础知识点 一.常用类 1.比较器 2.内部类 3.包装类 4.String常用方法: 5.正则 6.StringBuffer和StringBuild 7.Math和Random 8.日期类 ...

  • Java基础之:Collections工具类

    Java基础之:Collections工具类 Collections类简单介绍 Collections 是一个操作 Set.List 和 Map 等集合的工具类 Collections 中提供了一系列 ...

  • Java基础教程:Java的对象和类

    Java是一种面向对象的编程语言,那什么是对象,什么是类,又怎么使用呢? 什么是对象 客观存在的事物皆为对象,所以我们也常常说万物皆对象.换作Java语言,对象是一种类的实例.相当于现实生活中加一个量 ...

  • Java基础之:泛型

    Java基础之:泛型 在不使用泛型的情况下,在ArrayList 中,添加3个Dog. Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx()). package ...

  • Java 基础知识

    Java 基础知识

  • Java 基础语法

    注释 #单行注释 // 这里是单行注释 #多行注释 /* 这里是 多行注释 */ #JavaDoc /* *@Description: *@Author: */ Java可以使用中文命名 但不建议使用 ...

  • Java基础(第二期)

    数据类型扩展以及面试题讲解 整数拓展:进制 int i=10; int i2=010; //八进制0 int i3=0x10; //十六进制0x 0~9 A~F 16 相关进制转换自行学习,用的不多 ...

  • Java时间转换,日期格式化使用 YYYY-MM-dd 的潜在问题

    日期格式化使用 YYYY-MM-dd 的潜在问题 测试逻辑: 创建两个日期格式化,一个是出问题的YYYY-MM-dd,另一个是正确用法yyyy-MM-dd 分别去格式化两个不同的日期:2020年12月 ...

  • Java开发工程师最新面试题库系列——Java基础部分(附答案)

    JAVA基础 如果你有更好的想法请在评论区留下您的答案,一起交流讨论 面向对象有哪些特征? 答:继承.封装.多态 JDK与JRE的区别是什么? 答:JDK是java开发时所需环境,它包含了Java开发 ...