学习Java8中的日期类

public class Main {

    public static void main(String[] args) {
        // 获取今日日期
//        getToday();

        // 获取详细的年月日
//        getYearAndMonthAndDay();

        // 自定义日期
//        customDate();

        // 判断日期是否相等
//        checkIsEqualsTo();

        // 检查周期性日期
//        checkCycleDate();

        // 计算下一周后的日期
//        getNextWeekDate();

        // 获取前一年和后一年的日期
//        getBeforeAndNextYear();

        // 判断日期在当前之前还是之后
//        checkCurDateIsBeforeOrAfter();

        // 检查是否是闰年
//        checkLeapYear();

        // 获取当前时间(不含年月日)
//        getCurTime();

        // 时间加减计算
//        timePlusAndMinus();

        // 通过Clock时钟获取时间
//        useClock();

        // 在特定时区下的当前时间
//        useZoneDateTime();

        // 获取当前年月
//        getYearAndMonth();

        // 获取当月的天数
//        getDayCountInCurMonth();

        // 获取当前时间和指定时间的时间间隔
//        getTimeGap();

        // 通过Duration计算当前日期与指定日期的时间差
//        getTimeGapUseDuration();

        // 获取当前的时间戳
//        getTimestamp();

        // 解析指定时间
//        parseDate();

        // 字符串转时间
//        stringToDate();

        // Date与Instant互转
//        dateToInstant();

        // Date转LocalDateTime
//        dateToLocalDateTime();

        // 毫秒转LocalDateTime
//        msToLocalDateTime();

        // LocalDateTime转MS
//        localDateTimeToMS();

        // LocalDate转Date
        localDateTimeToDate();
    }

    /******************************年月日*********************************/

    /**
     * 获取今日日期
     */
    public static void getToday() {
        LocalDate today = LocalDate.now();
        System.out.println(today);
    }

    /**
     * 获取详细的年月日
     */
    public static void getYearAndMonthAndDay() {
        LocalDate today = LocalDate.now();
        System.out.println(today.getYear());
        System.out.println(today.getMonth().getValue());
        System.out.println(today.getDayOfMonth());
        System.out.println(today.getDayOfWeek().getValue());
        System.out.println(today.getDayOfYear());
    }

    /**
     * 自定义日期
     */
    public static void customDate() {
        LocalDate date = LocalDate.of(2020, 5, 21);
        System.out.println(date);
    }

    /**
     * 判断日期是否相等
     */
    public static void checkIsEqualsTo() {
        LocalDate date1 = LocalDate.now();
        LocalDate date2 = LocalDate.of(2022, 3, 15);
        System.out.println(date1.equals(date2));
    }

    /**
     * 检查周期性事件(如:生日)
     */
    public static void checkCycleDate() {
        LocalDate date1 = LocalDate.now();
        LocalDate date2 = LocalDate.of(2020, 3, 15);
        MonthDay birthday = MonthDay.of(date2.getMonth(), date2.getDayOfMonth());
        MonthDay curDay = MonthDay.from(date1);

        if (curDay.equals(birthday)) {
            System.out.println("生日快乐");
        } else {
            System.out.println("又是平凡的一天");
        }
    }

    /**
     * 计算一周后的日期
     */
    public static void getNextWeekDate() {
        LocalDate today = LocalDate.now();
        System.out.println("今天的日期:" + today);
        LocalDate nextWeekDate = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("一周后的日期:" + nextWeekDate);
    }

    /**
     * 计算前一年和下一年的日期
     */
    public static void getBeforeAndNextYear() {
        LocalDate today = LocalDate.now();
        LocalDate beforeYear = today.minus(1, ChronoUnit.YEARS);
        System.out.println(beforeYear);
        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println(nextYear);
    }

    /**
     * 判断当前日期相对于另一个日期是早还是晚
     */
    public static void checkCurDateIsBeforeOrAfter() {
        LocalDate today = LocalDate.now();
        LocalDate tomorrow = today.plusDays(1);
        if (tomorrow.isAfter(today)) {
            System.out.println("之后的日期: " + tomorrow);
        }

        LocalDate yesterday = today.minusDays(1);
        if (yesterday.isBefore(today)) {
            System.out.println("之前的日期:" + yesterday);
        }
    }

    public static void checkLeapYear() {
        LocalDate today = LocalDate.now();
        if (today.isLeapYear()) {
            System.out.println("当前是闰年");
        } else {
            System.out.println("当前是平年");
        }
    }

    /******************************时分秒*********************************/

    /**
     * 获取当前时间(不含年月日)
     */
    public static void getCurTime() {
        LocalTime time = LocalTime.now();
        System.out.println(time);
    }

    /**
     * 时间加减计算
     */
    public static void timePlusAndMinus() {
        LocalTime now = LocalTime.now();
        System.out.println("三小时后:" + now.plusHours(3));
        System.out.println("三小时前:" + now.minusHours(3));
    }

    /**
     * Clock时钟的使用,用于获取不同时区下的时间
     */
    public static void useClock() {
        Clock clock = Clock.systemUTC();
        System.out.println("clock: " + clock.instant());

        Clock defaultClock = Clock.systemDefaultZone();
        System.out.println("default clock: " + defaultClock.instant());
    }

    /**
     * 通过ZoneDateTime表示某时区下的时间
     */
    public static void useZoneDateTime() {
        ZoneId newYork = ZoneId.of("America/New_York");
        LocalDateTime localDateTime = LocalDateTime.now();
        ZonedDateTime dateAndTimeInNewYork  = ZonedDateTime.of(localDateTime, newYork);
        System.out.println("在特定地区的当前日期和时间:" + dateAndTimeInNewYork);
    }

    /******************************年月*********************************/

    /**
     * 获取当前年月
     */
    public static void getYearAndMonth() {
        YearMonth curYearAndMonth = YearMonth.now();
        System.out.println(curYearAndMonth);
    }

    /**
     * 获取当月天数
     */
    public static void getDayCountInCurMonth() {
        YearMonth yearMonth = YearMonth.now();
        System.out.println(yearMonth.lengthOfMonth());
    }

    /**
     * 通过Period计算当前时间和某个时间的间隔
     *
     * getMonths()和getDays()的值
     * 5.10/5.1:  1,9
     * 5.10/4.1:1,9  (月份和天数相加才是真正相差的数)
     * 6.10/4.1:2,9  (月份和天数相加才是真正相差的数)
     */
    public static void getTimeGap() {
        LocalDate today = LocalDate.now();
        LocalDate startLearn = LocalDate.of(2022, 2, 7);
        Period period = Period.between(today, startLearn);
        System.out.println("时间间隔:" + period.getMonths());
    }

    /**
     * 通过Duration计算时间差值
     */
    public static void getTimeGapUseDuration() {
        LocalDateTime today = LocalDateTime.now();
        LocalDateTime beforeWeek = today.minusWeeks(1);
        Duration duration = Duration.between(today, beforeWeek);
        System.out.println(duration.toHours());
    }

    /******************************Instant时间戳*********************************/

    /**
     * 获取当前时间的时间戳
     */
    public static void getTimestamp() {
        long timestamp1 = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        System.out.println(timestamp1);

        long timestamp2 = Instant.now().toEpochMilli();
        System.out.println(timestamp2 + " " + new Date().getTime());
    }

    /******************************使用指定的格式解析时间*********************************/

    /**
     * 通过指定的格式解析时间
     */
    public static void parseDate() {
        String curDate = "20220315";
        LocalDate localDate = LocalDate.parse(curDate, DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println(localDate);
    }

    /**
     * 字符串互转日期类型
     */
    public static void stringToDate() {
        LocalDateTime date = LocalDateTime.now();
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String str = date.format(formatter1);
        System.out.println("日期转换为字符串:" + str);

        DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime date2 = LocalDateTime.parse(str, format2);
        System.out.println("日期类型:" + date2);
    }

    /**
     * Date和Instant互转
     */
    public static void dateToInstant() {
        // Instant转Date
        Date date = Date.from(Instant.now());
        // Date转Instant
        Instant instant = date.toInstant();
        System.out.println(date);
        System.out.println(instant);
    }

    /**
     * Date转LocalDateTime
     */
    public static void dateToLocalDateTime() {
        LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(localDateTime);
    }

    /**
     * 毫秒转LocalDateTime
     */
    public static void msToLocalDateTime() {
        LocalDateTime localDateTime = LocalDateTime.ofInstant(
                Instant.ofEpochMilli(new Date().getTime()), ZoneId.systemDefault()
        );
        System.out.println(localDateTime);
    }

    /**
     * LocalDateTime转毫秒
     */
    public static void localDateTimeToMS() {
        long milli = LocalDateTime.of(2020, 3, 1, 0, 0, 0)
                .toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println(milli);
    }

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

推荐阅读更多精彩内容