JAVA8时间操作总结

Java8处理日期总结

Java8对lambda、streams做了优化,也推出了全新的处理时间API,明确了时间概念,如:instant(瞬时),duration(长短)、日期、时间、时区和周期,和老版本不同的是,新的API是以IOS为标准日历系统的,java.time下的所有类都是线程安全的。

关键API

  • ZonedDateTime:最完整的日期和时间,包含有相对UTC和时区已经格林威治时差。
  • LocalDateTime:不包含时差和时区信息。
  • LocalTime:包含时间,但是没有日期。
  • LocalDate:当地日期,不包含具体时间。
  • Instant:瞬时实例。

代码实现

主要通过一些简单的代码实例去学校Java8中的时间API,只有项目才是学习新知识最有效的方式。

使用LocalDate获取当前时间已经年、月、日信息

LocalDate表示当前本地的时间,但是只包含日期,没有时间

  /**
     * 获取当前时间已经年月日信息
     */
    public static void getNowDate(){
        //只获取日期
        LocalDate now = LocalDate.now();
        System.out.println("本地时间只有年月日:"+now);
        Date date = new Date();
        System.out.println("Java.Util.Date获取时间:"+date);
        int year = now.getYear();
        int monthValue = now.getMonthValue();
        int dayOfMonth = now.getDayOfMonth();
        System.out.printf("年 : %d  月 : %d  日 : %d t %n",year,monthValue,dayOfMonth);

    }

结果

本地时间只有年月日:2021-01-26
Java.Util.Date获取时间:Tue Jan 26 21:33:07 CST 2021
年 : 2021  月 : 1  日 : 26 t 

使用LocalDate获取特定时间

LocalDate.of()可以创建任意时间,只有输入年月日参数即可,不像之前的Java API起始时间是1900,月份从0开始。

    /**
     * 处理特点的时间根据年月日
     * @param year
     * @param month
     * @param day
     */
    public static void setSpecilDate(int year,int month,int day) {
        LocalDate date = LocalDate.of(year, month, day);
        System.out.println("设置时间为 :"+date);
    }

结果

设置时间为 :2021-1-26

使用equals判断两个日期是否相等

在现实项目中进程会遇到判断两个日期是否相等,LocalDate重载了 equal方法使得她们可以进行比较

 /**
     * 判断两个日期是否equals
     */
    public static void compareLocalDate(){
        LocalDate now = LocalDate.now();
        LocalDate date = LocalDate.of(2020, 12, 26);

        boolean equals = now.equals(date);
        String result =equals?"相等":"不相等";
        System.out.printf("时间now %s 和 时间date %s  %s \n", now, date,result);
    }

结果

时间now 2021-1-26 和 时间date 2021-1-26  相等 

使用MonthDay检查年周期性时间

在实际项目中,我们经常会遇到一些周期性的事件,例如生日、结婚纪念日或者每月定时给客户发送邮件等事件,在Java8中使用MonthDay类,实现了月份和日的组合,这样就可以判断每年都会发生的事件了

    /**
     * 处理一年只发生一次的事情
     */
    public static void cycleDate(){
        //获取当前时间
        LocalDate now = LocalDate.now();
        //设置特点时间
        LocalDate date = LocalDate.of(2020, 1, 26);
        //获取月份和日期
        MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());
        //获取当前时间的月份和日期
        MonthDay currentDay = MonthDay.from(now);
        String equals = currentDay.equals(monthDay)?"是":"不是";
        System.out.printf("时间now %s 和 时间date %s  %s 周期循环日 \n", now, date,equals);
    }

结果

时间now 2021-01-26 和 时间date 2020-01-26  是 周期循环日 

使用LocalTime获取当前时间(只有时间没有年月日),已经对时间进行加减操作

LocalTime可是使用静态工厂方法LocalTime.now()获取当前时间。默认格式是hh:mm:ss:nm。

    /**
     * 对时间进行加减操作
     */
    public static void operatDate(){

        LocalTime localTime = LocalTime.now();
        LocalTime time = localTime.plusHours(-1).plusMinutes(1).plusSeconds(30);
        System.out.printf("当前时间是 %s 和 加减操作后的时间 %s  \n", localTime, time);
    }

结果

当前时间是 22:03:52.522 和 加减操作后的时间 21:05:22.522  

计算N周、N月或者N年前、后的日期

  /**
     * 对LocalDate时间进行加减操作
     */
    public static void operatLocalDateDate(){

        LocalDate today = LocalDate.now();
        LocalDate previousYear = today.plusYears(-1).plusMonths(1).plusDays(1).plusWeeks(-1);

        LocalDate previousYear1 = today.minusYears(1).plusMonths(1).plusDays(1).minusWeeks(1);
        String result =previousYear.equals(previousYear1)?"相等":"不相等";
        System.out.printf("previousYear时间 %s 和 previousYear1时间  %s  %s \n", previousYear, previousYear1,result);

    }

结果:可见不同的操作有相同的结果,对时间进行操作要多思考

previousYear时间 2020-02-20 和 previousYear1时间  2020-02-20  相等 

判断连个日期的早晚

在LocalDate中包含isBefore()和isAfter比较日期比较

/**
     * 判断两个日期的早晚
     */
 public  static  void isBeforeOrAfter(){
     LocalDate now = LocalDate.now();
     LocalDate plusDays = now.plusDays(1);

     String beforeSrt = now.isBefore(plusDays)?"是":"不是";
     String afterSrt = plusDays.isAfter(now)?"是":"不是";


     System.out.printf("时间 %s %s  在时间  %s  之前 \n",now, beforeSrt, plusDays);
     System.out.printf("时间 %s %s  在时间  %s  之后 \n",plusDays, afterSrt, now);

 }

结果

时间 2021-01-26 是  在时间  2021-01-27  之前 
时间 2021-01-27 是  在时间  2021-01-26  之后 

使用Period计算两个日期之间的天数和月数

   /**
     * 计算日期相差天数和月数
     */
 public  static void clacDateDays(){
     LocalDate now = LocalDate.now();

     LocalDate plusMonths = now.plusMonths(2).plusDays(-1);
     Period between = Period.between(now, plusMonths);

     System.out.printf("时间 %s 和时间  %s  相差 %s 月   %s天 \n",now, plusMonths,between.getMonths(), between.getDays());

 }

结果

时间 2021-01-26 和时间  2021-03-25  相差 1 月   27天 

获取时间戳

    /**
     * 获取时间戳
     */
    public  static void getTimestamp(){
        Instant now = Instant.now();
        System.out.println(now);
    }

总结:

今天介绍Java8中日期和是时间API,主要介绍了LocalDate和LocalTime类,这些API都是线程安全的,而Date和Calendr类都是 是非线程安全的,介绍的可能不是很全还请一起探讨!


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

推荐阅读更多精彩内容