zoukankan      html  css  js  c++  java
  • Java中的日期类使用

    日期时间API

    • 计算世界时间的标准主要有:
      • UTC
      • GMT
      • CST

    System静态方法

    System类提供的 public static long currentTimeMillis() 用来返回当前时间与 1970年1月1日0时0分0秒 之间以毫秒为单位的时间差。

    long l = System.currentTimeMillis();
    System.out.println(l);
    

    Date类

    java.util.Date类:

    • import java.util.Date;
      public class Main {
          public static void main(String[] args)  {
              Date date = new Date(); // 创建了对应当前时间的Date对象
      
              System.out.println(date.toString());// Thu Jan 14 18:10:32 CST 2021
      
              System.out.println(date.getTime()); // 返回毫秒数
      
              Date date1 = new Date(2001, 8, 19);// 创建指定年月日的Date对象
              System.out.println(date1.toString());
      
              Date date2 = new Date(1610619181448L);// 创建指定秒数的Date对象
              System.out.println(date2.toString());
          }
      }
      

    java.sql.Date类:

    • 是对应数据库中的时间,为了专门匹配数据库中的。

    • import java.sql.Date;
      public class Main {
          public static void main(String[] args)  {
              Date date = new Date(1231231231L); // 创建了一个sql的Date对象
              System.out.println(date);// 1970-01-15
      
              // 父类对象不能强转换为子类对象,反之可以
          }
      }
      

    Calendar类

    位于:java.util.Calendar

    • Calendar 是一个抽象基类,主用用于完成日期字段之间相互操作的功能。

    • 获取 Calendar 实例方法

      • 使用 Calendar.getInstance() 方法
      • 调用它的子类 GregorianCalendar 的构造器
    • 一个 Calendar 的实例是系统时间的抽象表示,通过get(int field) 方法来取得想要得时间信息。比如 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY、MINUTE、SECOND

      API功能
      get(int filed)返回指定的属性值
      set(int filed, int change )将指定的属性设置为新的值
      add(int filed, int ad)在当前指定属性原来的值上加上指定的数
      getTime()返回一个Date对象
      setTime(Date date)将Calendar改为Date的时间
    • 注意:

      • 获取月份时:一月是从 0 开始的,后面的月份一次类推
      • 获取星期:周日是 1,周一是 2, 。。。。 周六是 7
    • 代码测试

    • import java.text.ParseException;
      import java.util.Calendar;
      import java.util.Date;
      
      
      public class Main {
      
          public static void main(String[] args) {
              // 实例化
              // 方式1: 创建其子类 (GregorianCalendar)的对象
              // 方式2: 调用它的静态方法getInstance()
      
              Calendar calendar = Calendar.getInstance();
      //        System.out.println(calendar.getClass());
      
              //常用方法
              // get()
              int days = calendar.get(Calendar.DAY_OF_MONTH); // 当前日期是这个月的第几天
              System.out.println(days);
              System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 当前日期是这一年的第几天
      
              // set()
              calendar.set(Calendar.DAY_OF_MONTH, 22);
              days = calendar.get(Calendar.DAY_OF_MONTH);
              System.out.println(days);
      
              // add()
              calendar.add(Calendar.DAY_OF_MONTH, 3);
              System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
              // getTime()
              Date date = calendar.getTime();
              System.out.println(date);
      
      
              // setTime()
              Date date1 = new Date();
              calendar.setTime(date1);
              System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
          }
      
      }
      

    SimpleDateFormat类

    位于 java.text.SimpleDateFormat

    • 它允许进行 格式化: 日期 -> 文本、**解析:**文本 -> 日期
    • 格式化:
      • SimpleDateFormat(): 默认的模式和语言环境创建对象
      • public SimpleDateFormat(String pattern): 该构造方法可以用参数 pattern 指定的格式创建一个对象,该对象调用
      • public String format(Date date): 方法格式化时间对象date
    • 解析:
      • public Date parse(String source): 给定字符串的开始解析文本,以生成一个日期。

    测试默认的构造器,创建的对象

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat();
            // 格式化:Date格式化为字符串
            Date date = new Date();
            System.out.println(date);
            String format = sdf.format(date);
            System.out.println(format);
    
            // 解析: 格式化的逆过程
            String str = "2021/1/17 下午6:41";
            try {
                Date date1 = sdf.parse(str);
                System.out.println(date1);
            } catch (ParseException e) {
                e.printStackTrace();
            }
    
        }
    
    }
    

    输出

    Sun Jan 17 18:41:49 CST 2021
    2021/1/17 下午6:41
    Sun Jan 17 18:41:00 CST 2021
    

    使用带参数的构造器
    在这里插入图片描述

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    
    public class Main {
    
        public static void main(String[] args) throws ParseException {
            // 带参数的构造函数,中传入的希望格式化的样式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            // 格式化
            String s = sdf.format(new Date());
            System.out.println(s);
    
            // 解析
            Date date = sdf.parse("2021-01-17 06:47:18");
            System.out.println(date);
    
        }
    
    }
    

    输出:

    2021-01-17 06:49:36
    Sun Jan 17 06:47:18 CST 2021
    

    练习

    • 将 “2020-09-08” 转换为 java.sql.Date.

      • 先将字符串,转换成Date类
        • 通过SimpleDateForm类的解析方法
      • 将Date类转换成sql.Date
        • 通过sql.Date带参数的构造器,用Date的getTime方法传入参数
    • import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      
      public class Main {
          // 练习:将2020-09-08转换为sql.Date
          public static void main(String[] args) throws ParseException {
              testExer();
      
          }
          public static void testExer() throws ParseException {
              String birth = "2020-09-08";
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      
              Date date = sdf.parse(birth);
              // 将Date 转换成 sql.Date, 同步构造器传入秒。
              java.sql.Date birthDate = new java.sql.Date(date.getTime());
              System.out.println(birthDate.toString());
          }
      }
      

    LocalDate类、LocalTime类、LocalDateTime类

    方法描述
    now()静态方法,根据当前的时间创建对象/指定时区的对象
    of()静态方法。根据指定日期/时间创建对象
    getDayOfMonth()/getDayOfYear()获得月份天数(1-31)/ 获得年份天数(1-366)
    getDayOfWeek()获得星期几(返回一个DayOfWeek 枚举值)
    getMonth()获得月份、返回一个Month枚举值
    getMonthValue()/getYear()获得月份(1-12)/获得年份
    getHour()/getMinute()/getSecond()获得当前对象对应的小时、分钟、秒
    withDayOfMonth()/withDayOfYear()/withMonth()/withYear()将月份天数、年份天数、月份、年份修改为指定的值并返回新对象
    plusDays(),pulsWeeks(),plusMonths(),plusYears(),plusHours()向当前对象添加几天,几周,几个月,几年,几小时
    minusMonths(), minusWeeks(),minusDays(),minusYears(),minusHours()从当前对象减去几月,几周,几天几年,几个小时
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    
    
    public class Main {
    
        public static void main(String[] args) {
    
    
            // LocalDate
            LocalDate localDate = LocalDate.now(); // 获取当前系统时间
            System.out.println(localDate);
    
    
            // LocalTime
            LocalTime localTime = LocalTime.now(); // 获取当前系统时间
            System.out.println(localTime);
    
    
            // LocalDateTime
            LocalDateTime localDateTime = LocalDateTime.now();// 获取当前系统时间
            System.out.println(localDateTime);
            // of()
            LocalDateTime localDateTime1 = LocalDateTime.of(2021, 1, 17, 20, 0, 0);
            System.out.println(localDateTime1);
    
            // getXXX()
    
            System.out.println(localDateTime.getDayOfMonth());
            System.out.println(localDateTime.getDayOfWeek());
            System.out.println(localDateTime.getMonth());
            System.out.println(localDateTime.getMonthValue());
            System.out.println(localDateTime.getMinute());
            // 体现不可变性
            LocalDate localDate1 = localDate.withDayOfMonth(22);
            System.out.println(localDate);
            System.out.println(localDate1);
            
            
        }
    
    }
    

    Instant类

    • 用来记录某个时间点,以秒为单位

      • 方法描述
        now()静态方法,返回默认UTC时区的Instant类的对象
        ofEpochMilli(long epochMilli)静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
        atOffset(ZoneOffse offset)结合即时的偏移量来创建一个 OffsetDate Time
        toEpochMilli()返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳
      import java.time.*;
      
      
      public class Main {
      
          public static void main(String[] args) {
              // now(): 获取本初子午线对应的标准时间
              Instant instant = Instant.now();
              System.out.println(instant);
      
              // 添加时间偏移量
              OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
              System.out.println(offsetDateTime);
      
              //  获取距离 1970-01-01 00:00:00 到现在的毫秒数
              long l = instant.toEpochMilli();
              System.out.println(l);
      
              // 通过给定的毫秒数,计算Instant实例
              Instant instant1 = Instant.ofEpochMilli(1610885932356L);
              System.out.println(instant1);
      
          }
      
      }
      
    • 输出

      • 2021-01-17T12:19:55.217502900Z
        2021-01-17T20:19:55.217502900+08:00
        1610885995217
        2021-01-17T12:18:52.356Z
        

    DateTimeFormatter类

    位于 java.time.format.DateTime.Formatter类:该类提供了三种格式化方法

    • 预定义格式标准。如:

      ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME

    • 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)

    • 自定义的格式化。如:ofPattern(“yyyy-MM-dd hh:mm:ss E”)

      • 方法描述
        ofPattern(String pattern)静态方法,返回一个指定字符串格式DateTimeFormatter
        format(TemporalAccessor t)格式化一个日期、时间。返回字符串
        parse(CharSequence text)将指定格式的字符序列解析为一个日期、时间
      import java.time.*;
      import java.time.format.DateTimeFormatter;
      import java.time.format.FormatStyle;
      import java.time.temporal.TemporalAccessor;
      
      
      public class Main {
      
          public static void main(String[] args) {
              // 实例化
              // 1
              DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
              // 格式化:把日期改为字符串
              LocalDateTime localDateTime = LocalDateTime.now();
              String s = formatter.format(localDateTime);
              System.out.println(localDateTime);
              System.out.println(s);
      
              // 解析:字符串到日期
              TemporalAccessor parse = formatter.parse("2021-01-17T20:31:10.7686176");
              System.out.println(parse);
              // 2
              DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
              //格式化
              String s1 = formatter1.format(localDateTime);
              System.out.println(s1);
      
      
              DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
      
              String s2 = formatter2.format(LocalDateTime.now());
              System.out.println(s2);
      
              // 3
              DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
      //      格式化
              String s3 = formatter3.format(LocalDateTime.now());
              System.out.println(s3);
      
          }
      
      }
      

      输出

      2021-01-17T20:38:09.291183500
      2021-01-17T20:38:09.2911835
      {},ISO resolved to 2021-01-17T20:31:10.768617600
      2021/1/17 下午8:38
      2021年1月17日星期日
      2021-01-17 08:38:09
      
    追求吾之所爱
  • 相关阅读:
    hdu2138(求素数)
    hdu2104
    poj1664(放苹果)
    数塔问题给你有哪些启示?
    汉诺塔问题(1)
    算法的力量(转李开复)
    最长子序列问题之系列一
    forward和redirect的区别
    group by 和having
    java中的多态三要素是什么?
  • 原文地址:https://www.cnblogs.com/rstz/p/14390969.html
Copyright © 2011-2022 走看看