美文网首页人生几何?
26.日期时间:Date,SimpleDateFormat,Ca

26.日期时间:Date,SimpleDateFormat,Ca

作者: 每天起床都想摆 | 来源:发表于2022-02-03 14:10 被阅读0次

    日期时间

    Date

    Date类概述

    • Date类的对象在java中代表的是当前所在系统的此刻日期时间

    Date的构造器

    名称 说明
    public Date() 创建一个Date对象,代表的是系统当前此刻日期时间

    Date的常用方法

    名称 说明
    public long getTime() 获取时间对象的毫秒值

    Date类已弃用的有参构造器及方法

    构造器 说明
    public Date(long time) 把时间毫秒值转换成Date日期对象
    Date方法 说明
    public void setTime(long time) 设置日期对象的时间为当前时间毫秒值对应的时间

    Date类记录时间的2种形式

    1. 形式1:日期对象

      // 创建一个Date类的对象,代表系统此刻日期时间对象
      Date date = new Date();
      System.out.println(date);   // 打印的是内容,说明完成了重写
      
    1. 形式2:时间毫秒值(参照常用API-System-System类的常用方法)

      //用来作性能分析
      long startTime = System.currentTimeMillis(); // 性能分析起始时间
      for (int i = 0; i < 100000; i++) {
      System.out.println(i);
      }
      long endTime = System.currentTimeMillis(); // 性能分析结束时间
      double time = (endTime - startTime) / 1000.0;
      System.out.println("for循环十万次花费:" + time);
      
    2. 测试代码

      package com.java.data_test;
      
      import java.util.Date;
      
      /**
       * 计算当前时间往后走1小时121秒之后时间是多少
       */
      public class DateTransDemo {
      
      
          public static void main(String[] args) {
              long time = System.currentTimeMillis();
               time += (60 * 60 + 121) * 1000;    // 得到当前时间毫秒值
      
              Date date = new Date();
              System.out.println(date);   // 当前时间
      
              // 方法一:把时间毫秒值转换成对应的日期对象
              Date d = new Date(time);
              System.out.println(d);      // 目标未来时间
      
              // 方法二:通过setTime直接将时间毫秒值转换成日期
              Date dt = new Date();
              dt.setTime(time);
              System.out.println(dt);
      
          }
      }
      
      

    总结:

    1. 日期对象如何创建,如何获取时间毫秒值

      Date date = new Date();
      Long time = date.getTime();
      
    1. 时间毫秒值怎么恢复成日期对象

      Date date = new Date(time);
      d.setTime(time)
      

    SimpleDateFormat

    SimpleDateFormat类的作用

    • 可以对Date对象或时间毫秒值格式化成自定义的时间格式
    • 也可以把字符串的时间形式解析成日期对象

    SimpleDateFormat的构造器

    构造器 说明
    public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认格式
    public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat,使用指定的格式

    SimpleDateFormat的格式化方法

    格式化方法 说明
    public final String format(Date date) 将日期格式化成日期/时间字符串
    public final String format(Object time) 将时间毫秒值格式化成日期/时间字符串

    格式化的时间形式的常用的模式对应关系

    时间形式 对应模式
    y
    M(大写)
    d
    H(大写)
    m
    s

    2022-11-11 13:27:06 ------> yyyy-MM-dd HH:mm:ss

    2022年11月11日 13:27:06 ------> yyyy年MM月dd日 HH:mm:ss

    EEE 为星期 a 为上下午

    • 格式化测试代码:

      package com.java.data_test;
      
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      public class SimpleDateFormatDemo {
          public static void main(String[] args) {
              Date date = new Date();
              System.out.println(date);
      
              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
              String rs = dateFormat.format(date);
              System.out.println(rs); //2022年02月03日 12:12:50 周四 下午
      
      
              //计算当前时间往后走1小时121秒之后时间
              long time = System.currentTimeMillis() + ((60 * 60 + 121) * 1000);
              String result =  dateFormat.format(time);
              System.out.println(result);
      
          }
      }
      
      

    SimpleDateFormat解析字符串时间成为日期对象

    解析方法 说明
    public Date parse(String source) 从给定字符串的开始解析文本以生成日期

    解析时一定要使字符串参数的格式和被解析时间字符串的格式保持完全一致

    parse返回的是Date型数据,因此需要Date型变量接收

    • 日期解析测试代码

      {
          public static void main(String[] args) throws ParseException {
              String dateStr = "2022年02月03日11点11分11秒";
      
              //解析
              SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH点mm分ss秒");
              Date date = dateFormat.parse(dateStr);
      
              Date d = new Date();
              //加L防止计算结果越界导致int值失真
              long time = d.getTime() + ((15L * 24 + 14) * 60 * 60 + 13 * 60 + 12) * 1000;
      
              System.out.println(dateFormat.format(time));    //2022年02月19日03点11分34秒
      
          }
      }
      

    秒杀活动案例

    • 案例描述:“1元秒杀活动”,秒杀开始时间:2022年2月14日 02:14:00,秒杀结束时间:2022年2月14日 02:14:59

    • 案例需求:

      • 张三下单并付款时间:2022年2月14日 02:14:11
      • 李四下单并付款时间:2022年2月14日 02:15:01
      • 分析说明二者是否成功参加秒杀活动
    • 分析:

      • 判断下单时间是否在开始到结束的范围内
      • 把字符串的时间变成毫秒值
    • 测试代码:

      package com.java.data_test;
      
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      public class SpikeDemo {
          public static void main(String[] args) throws ParseException {
              // 记录开始结束时间
              String startTime = "2022年2月14日 02:14:00";
              String endTime = "2022年2月14日 02:14:59";
      
              // 记录用户参与时间
              String zs = "2022年2月14日 02:14:11";
              String ls = "2022年2月14日 02:15:01";
      
              // 解析时间
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月dd日 HH:mm:ss");
              Date d1 = sdf.parse(startTime);
              Date d2 = sdf.parse(endTime);
              Date d3 = sdf.parse(zs);
              Date d4 = sdf.parse(ls);
      
              // Date提供了before和after用来判断时间先后,返回逻辑值
              if (d3.after(d1) && d3.before(d2)) {
                  System.out.println("张三秒杀成功!");
              }
              if (d4.after(d1) && d4.before(d4)) {
                  System.out.println("李四秒杀成功!");
              }
      
          }
      }
      
      

    Calendar

    Calendar概述

    • Calendar代表了系统此刻日期对应的日历对象
    • Calendar是一个抽象类,不能直接创建对象

    Calendar常用方法

    calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化

    方法名 说明
    public int get(int field) 取日期中的某个字段信息
    public void set(int field,int value) 修改日历的某个字段信息
    public void add(int field,int amount) 为某个字段增加/减少指定的值
    public final Date getTime() 拿到此刻日期对象
    public long getTimeInMillis() 拿到此刻时间毫秒值
    • 测试代码:

      package com.java.data_test;
      
      import java.util.Calendar;
      import java.util.Date;
      
      
      /*
       public  int  get(int field)              | 取日期中的某个字段信息
       public  void  set(int field,int  value)  | 修改日历的某个字段信息
       public  void  add(int field,int  amount) | 为某个字段增加/减少指定的值
       public  final  Date getTime()            | 拿到此刻日期对象
       public  long  getTimeInMillis()          | 拿到此刻时间毫秒值
       */
      public class CalendarDemo {
          public static void main(String[] args) {
              // 1.拿到系统此刻日历对象
              Calendar cal = Calendar.getInstance();
              System.out.println(cal);    //日历中有大量的字段,可以通过打印对象来查询所有字段
      
              // 2.获取日历的信息
              int year = cal.get(Calendar.YEAR);  //查询年
              System.out.println(year);
              int mm = cal.get(Calendar.MONTH) + 1;   //查询月   MONTH从0开始记月,因此需要+1
              System.out.println(mm);
              int days = cal.get(Calendar.DAY_OF_YEAR);   //查询今天是本年中的第几天
              System.out.println(days);
      
              // 3.修改日历的某个字段信息
              cal.set(Calendar.HOUR,12);  //HOUR=12
              System.out.println(cal);
      
              // 4.为某个字段增加/减少指定的值
              cal.add(Calendar.DAY_OF_YEAR,10);// 计算10天后是什么时间
              cal.add(Calendar.MINUTE,59);
              System.out.println(cal);
      
              // 5.拿到此刻日期对象
              Date d = cal.getTime();
              System.out.println(d);
      
              // 6.拿到此刻时间毫秒值
              long time = cal.getTimeInMillis();
              System.out.println("time");
      
          }
      }
      
      

    相关文章

      网友评论

        本文标题:26.日期时间:Date,SimpleDateFormat,Ca

        本文链接:https://www.haomeiwen.com/subject/spidkrtx.html