27.JDK8开始新增日期API:LocalDate、LocalTime、LocalDateTime

JDK8开始新增日期API

概述

  • 从Java8开始,java.time包提供了新的日期和时间API,主要涉及的类型有
    • LocalDate:不包含具体时间的日期
    • LocalTime:不含日期的时间
    • LocalDateTime:包含了日期及时间
    • Instant:代表的是时间戳
    • DateTimeFormatter:用于做时间的格式化和解析的
    • Duration:用于计算两个“时间”间隔
    • Period:用于计算两个“日期”间隔
  • 新增的API严格区分了时刻,本地日期,本地时间,并且,对日期和时间进行运算更加方便
  • 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改

LocalTime/LocalDate/LocalDateTime ' API

  • 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象
  • 他们三者构建对象和API都是通用的


  • 构建对象的方式

    方法名 说明 例子
    public static Xxxx now(); 静态方法,根据当前时间创建对象 LocalDate localdate = LocalDate.now();
    LocalTime localtime = LocalTime.now();
    LocalDateTime localdatetime = LocalDateTime.now();
    public static Xxxx of(...) 静态方法,指定日期/时间创建对象 LocalDate localdate1 = LocalDate.now(2000,12,16);
    LocalTime localtime1 = LocalTime.now(11,11,11);
    LocalDateTime localdatetime1
    =
    LocalDateTime.now(2000,12,16,20,23,57);
  • 获取信息的API

    方法名 说明
    public int getYear(); 获取年
    public int getMonthValue(); 获取月份(1-12)
    public int getDayOfMonth(); 获取月中第几天
    public int getDayOfYear(); 获取年中第几天
    public DayOfWeek getDayOfWeek() 获取星期
  • LocalDateTime的转换API

    方法名 说明
    public LocalDate toLocalDate() 转换成一个LocalDate对象
    public LocalTime toLocalTime() 转换成一个LocalTime对象
  • 修改相关API

    方法名 说明
    plusDays,plusWeeks,plusMonths,plusYears 向当前LocalDate对象添加几天/周/月/年
    minusDays,minusWeeks,minusMonths,minusYears 从当前对象减去几天/周/月/年
    withDayOfMonth,withDayOfYear,withMonth,withYear 将月份天数,年份天数,月份,年份修改为指定的值
    并返回新的LocalDate对象
    isBefore,isAfter 比较两个LocalDate

    LocalDateTime综合了LocalDate和LocalTime里面的方法,测试用例仅用LocalDate和LcoalTime测试

    这些方法返回的是一个新的实例引用,因为LocalDateTime,LocalDate,LocalTime都是不可变的

LocalDate测试代码

package com.java.jdk8time_update;

import java.time.LocalDate;
import java.time.Month;

/**
 * LocalDate测试案例
 */
public class LocalDateTest {
    public static void main(String[] args) {
        // 获取本地日期对象
        LocalDate nowDate = LocalDate.now();    // 出现的日期,说明重写了toString()
        System.out.println("今天的日期" + nowDate);

        int year = nowDate.getYear();

        int month = nowDate.getMonthValue();

        int day = nowDate.getDayOfMonth();

        System.out.println(year + "年" + month + "月" + day + "日");

        int dayOfYear = nowDate.getDayOfYear();
        System.out.println("一年中的第" + dayOfYear + "天");

        //DayOfWeek返回值类型是DayOfWeek,因此调用getValue()获取值为int类型方便使用int类型变量接收
        int dayOfWeek = nowDate.getDayOfWeek().getValue();
        System.out.println("一周的第" + dayOfWeek + "天");

        int intMonth = nowDate.getMonth().getValue();
        System.out.println("月份:" + nowDate.getMonth()); //直接调用默认英文显示
        System.out.println("月份:" + intMonth);

        System.out.println("---------------------------------------------");
        LocalDate bt = LocalDate.of(1949, 10, 1);
        System.out.println("打印指定日期:" + bt);
        // Month.NOVEMBER使用枚举的方式输出指定日期
        System.out.println("枚举方式指定日期:" + LocalDate.of(1949, Month.NOVEMBER, 11));


    }
}

LocalTime测试代码

package com.java.jdk8time_update;

import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * LocalTime测试案例
 */
public class LocalTimeTest {
    public static void main(String[] args) {
        LocalTime nowTime = LocalTime.now();
        System.out.println("今天的时间:" + nowTime);

        int hours = nowTime.getHour();
        int minutes = nowTime.getMinute();
        int seconds = nowTime.getSecond();
        int nanos = nowTime.getNano();
        System.out.println("今天的时间【格式:时/分/秒/纳秒】:");
        System.out.println(hours + "/" + minutes + "/" + seconds + "/" + nanos);

        System.out.println("------------------------指定时间------------------------");
        System.out.println(LocalTime.of(8,20));
        System.out.println(LocalTime.of(8,20,30));
        System.out.println(LocalTime.of(8,20,30,150));
        LocalTime time = LocalTime.of(8,20,30,150);
        System.out.println(time);

        System.out.println("------------------------指定年月日时刻-------------------");
        System.out.println(LocalDateTime.of(1991, 12, 16, 8, 31, 23, 143));


    }
}

LocalDateTime测试代码

package com.java.jdk8time_update;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * LocalDateTime测试案例
 * 兼容了LocalDate & LocalTime所有的API
 */
public class LocalDateTimeTest {
    public static void main(String[] args) {
        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("今日时间:" + nowDateTime);
        System.out.println("年:" + nowDateTime.getYear());
        System.out.println("月:" + nowDateTime.getMonthValue());
        System.out.println("日:" + nowDateTime.getDayOfMonth());
        System.out.println("时:" + nowDateTime.getHour());
        System.out.println("分:" + nowDateTime.getMinute());
        System.out.println("秒:" + nowDateTime.getSecond());
        System.out.println("纳秒:" + nowDateTime.getNano());

        System.out.println("当年第几天:" + nowDateTime.getDayOfYear());
        System.out.println("当月第几天:" + nowDateTime.getDayOfMonth());
        System.out.println("当周第几天:" + nowDateTime.getDayOfWeek().getValue());
        System.out.println("星期几:" + nowDateTime.getDayOfWeek());
        System.out.println("几月份:" + nowDateTime.getMonthValue());
        System.out.println("几月份:" + nowDateTime.getMonth());

        // 转换对象
        LocalDate ld = nowDateTime.toLocalDate();
        System.out.println(ld);
        System.out.println(ld.getDayOfYear());

        LocalTime lt = nowDateTime.toLocalTime();
        System.out.println(lt);
        System.out.println(lt.getHour());

    }
}

日期时间修改测试代码

package com.java.jdk8time_update;

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

/**
 * 对日期进行修改
 */
public class UpdateTimeTest {
    public static void main(String[] args) {
        LocalTime nowTime = LocalTime.now();
        System.out.println(nowTime);
        // 以小时增减操作为例
        System.out.println(nowTime.plusHours(1));
        System.out.println(nowTime.minusHours(2));
        //LocalTime为不可变对象,每次操作都会产生新的对象,原对象的信息并没有发生变化
        System.out.println(nowTime);


        LocalDate date1 = LocalDate.of(2022, 2, 6);
        LocalDate date2 = LocalDate.now();
        System.out.println("两个日期相同吗:" + date1.equals(date2));
        System.out.println("data1 before data2:" + date1.isBefore(date2));
        System.out.println("data1 after data2:" + date1.isAfter(date2));

        // MonthDay :月日对象
        MonthDay d1 = MonthDay.of(date1.getMonthValue(), date1.getDayOfMonth()); //获取月日
        MonthDay d2 = MonthDay.from(date2); //获取今天的日期

        System.out.println("d1 == d2 时触发某事件:" + d1.equals(d2));
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容