zoukankan      html  css  js  c++  java
  • 史上最全日期时间类讲解

    SimpleDateFormat的基本使用

    SimpleDateFormat formats = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //时间类型转为String类型 Date date = new Date(System.currentTimeMillis()); String dateString = formats.format(date); System.out.println("dataString----"+dateString);
    //String类型转为时间类型 String time="2021-07-07 15:49:42"; Date date1 = formats.parse(time); System.out.println("Date----"+date1);
    //时间类型转成时间戳 Long timeStamp=date1.getTime(); System.out.println("timeStamp----"+timeStamp);

    输出结果:dataString----2021-07-07 16:10:08

         Date----Wed Jul 07 15:49:42 CST 2021

         timeStamp----1625644182000

    注意 :yyyy-MM-dd HH:mm:ss是时间格式 可修改,比如yyyy-MM-dd;HH:mm:ss;yyyyMMddHHmmss等

               new Date()方法中参数是long类型的毫秒值

    栗子:获取现在小时

    public static String getHour() {
       Date currentTime = new Date();
       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String dateString = formatter.format(currentTime);
       String hour;
       hour = dateString.substring(11, 13);
       return hour;
    }

    栗子: 获取两个日期的间隔天数 getTwoDay("2021-07-08","2021-06-20")

    public static String getTwoDay(String day1, String day2) {
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
       long day = 0;
       try {
          java.util.Date bigDate = format.parse(day1);
          java.util.Date smallDate = format.parse(day2);
          day = (bigDate.getTime() - smallDate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (Exception e) {
          return "";
       }
       return day + "";
    }

    Calendar 的基本使用

    获取当前时间的年月日时分秒

    Calendar cal = Calendar.getInstance();
    System.out.println("年:" + cal.get(Calendar.YEAR));
    System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
    System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
    System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
    System.out.println("分:" + cal.get(Calendar.MINUTE));
    System.out.println("秒:" + cal.get(Calendar.SECOND));

    输出结果:年:2021  月:7  日:7  时:16  分:57  秒:53

    注意:月份下标从0开始,所以取月份要+1

    栗子:1 月 31 号的时候,月份加一,会出现怎样结果:

    Calendar cal = Calendar.getInstance();
    cal.set(2018, 0, 31, 8, 0, 0);
    cal.add(Calendar.MONTH, 1);
    System.out.println(cal.getTime());

    输出结果:Wed Feb 28 08:00:00 CST 2018

    注意:Calendar类的getTime()获取当前日期: Wed Feb 28 08:00:00 CST 2018

    LocalDateTime,LocalDate,LocalTime的基本使用

    LocalDateTime表示日期和时间,LocalDate用来表示日期,LocalTIme表示时间,LocalDateTime = LocalDate + LocalTIme。

    System.out.println(LocalDate.now()); //2020-04-02
    System.out.println(LocalTime.now()); //11:29:52.206
    System.out.println(LocalDateTime.now()); //2020-04-02T11:29:52.206

    1、初始化

    LocalDateTime可以分别获取LocalDate和LocalTime:

      1.toLocalDate 返回LocalDateTime的LocalDate部分

      2.toLocalTime 返回LocalDateTime的LocalTime部分

    2、获取指定时间

    LocalTime.of(int hour,int minute,int second):指定时、分、秒,参数不可缺省

    LocalDate.of(int year,MOUTH mouth,int day)

    LocalDate.of(int year,int mouth,int day):指定年、月、日,参数不可缺省

    这里指定月份的话是从1开始,与Calendar不同,Calendar的月份是从0开始,这也就是LocalDate比Calendar处理时间要方便的多。

    LocalDateTime.of(LocalDate localDate,LocalTime localTime)

    LocalDateTime.of(nt year,int mouth,int day,int hour,int minute,int second,int nanoOfSecond):指定年、月、日、时、分、秒、纳秒,参数可缺省

    //2020-12-01
    System.out.println(LocalDate.of(2020,12,1)); 
    2020-04-23
    System.out.println(LocalDate.of(2020, Month.APRIL,23));
    12:23:33
    System.out.println(LocalTime.of(12,23,33));
    //2020-04-02T11:48:20.785
    System.out.println(LocalDateTime.of(LocalDate.now(),LocalTime.now()));
    //2322-12-22T23:12:33.000000232
    System.out.println(LocalDateTime.of(2322,12,22,23,12,33,232));
    //2322-07-22T23:12:33.000000232
    System.out.println(LocalDateTime.of(2322,Month.JULY,22,23,12,33,232));

    3、时间操作

    这里以LocalDateTime进行举例说明

    说明:1、plus是增加相应时间单位的水量,minus是减少相应时间单位的数量,此处不再说明;

               2、表中的拷贝实际就是对相应时间位置的数值进行修改

    LocalDateTime now = LocalDateTime.now();
            System.out.println(now);
            System.out.println(now.plusYears(1)
                    .plusMonths(1L)
                    .plusWeeks(1)
                    .plusDays(1)
                    .plusHours(1)
                    .plusMinutes(1)
                    .plusSeconds(1)
                    .plusNanos(500000L));
     
    //2020-04-02T12:04:22.507
    //2021-05-10T13:05:23.507500
     
    LocalDate date = LocalDate.of(2020, 2, 22); // 2020-02-22
    LocalDate date1 = date.withYear(2021); // 修改为 2021-02-22
    LocalDate date2 = date.withMonth(3); // 修改为 2020-03-22 
    LocalDate date3 = date.withDayOfMonth(1); // 修改为 2020-02-01

    4、获取时间属性值

    5.时间格式之间相互转换

    LocalDateTime与String
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
    LocalDateTime localDateTime = LocalDateTime.now();
    String dateStr = dateTimeFormatter.format(localDateTime);
    System.out.println(dateStr); \2020年04月02日 14时11分01秒623毫秒
    LocalDateTime localDateTime2 = LocalDateTime.parse(dateStr, dateTimeFormatter); System.out.println(localDateTime2); \ 2020-04-02T14:11:01.623
    LocalDate localDate = LocalDate.parse(dateStr, dateTimeFormatter); System.out.println(localDate); \2020-04-02
    LocalTime localTime = LocalTime.parse(dateStr, dateTimeFormatter); System.out.println(localTime); \14:11:01.623
    时间戳与LocalDate、LocalDateTime之间相互转换
    long timestamp = Instant.now().toEpochMilli();
    LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
    System.out.println(timestamp +"====>"+ localDateTime );
    timestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); System.out.println(localDateTime +"====>"+ timestamp );
    // 注意秒和毫秒之间的区别 timestamp = LocalDateTime.now().atZone(ZoneOffset.ofHours(8)).toEpochSecond(); localDateTime = Instant.ofEpochSecond(timestamp).atOffset(ZoneOffset.ofHours(8)).toLocalDateTime(); System.out.println(timestamp +"====>"+ localDateTime );
    Date与LocalDate、LocalDateTime之间相互转换
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime);
    Date date = Date.from(localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant()); localDateTime = date.toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); System.out.println(date + "======>" + localDateTime); //2020-04-02T14:27:40.230 //Thu Apr 02 14:27:40 CST 2020======>2020-04-02T14:27:40.230

    6.其他方法

    LocalDateTime now = LocalDateTime.now();
    System.out.println("当前时间:" + now);
    LocalDateTime from = LocalDateTime.of(2020, 4, 1, 0, 0, 0, 0);
    System.out.println(from.until(now, ChronoUnit.HOURS));
    /*打印结果:
    当前时间:2020-04-03T14:40:39.048
    62
    */
     
    LocalDateTime date = LocalDateTime.parse("2014-12-03T10:15:30");
    System.out.printf("LocalDateTime precision is %s%n",
    zonedDateTime.query(TemporalQueries.precision()));
    /*打印结果:
    LocalDateTime precision is Nanos
    */
    ZonedDateTime date = ZonedDateTime.now();
    System.out.println(date);
    LocalTime standard = LocalTime.parse("10:30:30");
    date = (ZonedDateTime)standard.adjustInto(date);
    System.out.println(date);
    /*打印结果:
    2020-04-03T15:03:31.579+08:00[Asia/Shanghai]
    2020-04-03T10:30:30+08:00[Asia/Shanghai]
    */

    7.Instant(时间点)

      Instant是时间线上的一个点,表示一个时间戳。Instant可以精确到纳秒,这超过了long的最大表示范围,所以在Instant的实现中是分成了两部分来表示,一部分是seconds,表示从1970-01-01 00:00:00开始到现在的秒数,另一个部分是nanos,表示纳秒部分。以下是创建Instant的两种方法:

    Instant now = Instant.now(); 
    //获取当前时刻的时间戳,结果为:2020-04-02T07:30:23.811Z;
    Instant instant = Instant.ofEpochSecond(600, 1000000);
    //ofEpochSecond()方法的第一个参数为秒,第二个参数为纳秒,上面的代码表示从1970-01-01 00:00:00开始后一分钟的10万纳秒的时刻,
    //其结果为:1970-01-01T00:10:00.001Z。
    我话讲完!谁赞成?谁反对?
  • 相关阅读:
    XV6文件系统
    XV6锁
    PC硬件以及引导加载器
    XV6第一个进程
    XV6操作系统接口
    XV6环境搭建及注意事项
    XV6文件系统
    XV6上下文切换
    少走弯路的十条忠告
    LIBCMTD.lib与libcpmtd冲突的解决方法。
  • 原文地址:https://www.cnblogs.com/wffzk/p/13789389.html
Copyright © 2011-2022 走看看