日期与时间【Date/SimpleDateFormat/Calendar】

打印 上一主题 下一主题

主题 628|帖子 628|积分 1884

视频链接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3
1 Data

1.1 Date类概述


  • Date类的对象在java中代表的是当前所在系统的此刻日期时间。
  • Date的构造器
    public Date():创建一个Date对象,代表的是系统当前此刻日期时间。
  • Date的常用方法
    public long getTime():获取时间对象的毫秒值
1.2 Date类记录时间的2种形式


  • 日期对象
  1. //1、创建一个Date对象,代表的是系统当前此刻日期时间。
  2. Date date =new Date();
  3. System.out.println(date);  //Fri May 05 21:09:54 CST 2023
复制代码

  • 时间毫秒值


  • 指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数
  1. //2、获取时间毫秒值
  2. long time = date.getTime();
  3. System.out.println(time);   //1683292462323
  4. long times = System.currentTimeMillis();
  5. System.out.println(times);  //1683292462336
复制代码
1.3 案例


  • 请计算出当前时间为往后走1小时121秒之后的时间是多少
  • 时间毫秒值→日期对象

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

  1. //构造器
  2. long time = System.currentTimeMillis();
  3. time += (60 * 60 + 121) *1000;
  4. Date d2 = new Date(time);
  5. System.out.println(d2);
  6. //Date方法
  7. Date d3 = new Date();
  8. d3.setDate(time);
  9. System.out.println(d3);
复制代码
2 SimpleDateFormat

2.1 SimpleDateFormat概述


  • 可以对Date对象或时间毫秒值格式化我们喜欢的时间形式。
  • 可以把字符串的时间形式解析成对象格式
  • 格式化的时间形式的常用的模式

    • y-年;M-月;d-日;
    • H-时;m-分;s-秒;
    • EEE-星期几;a-上午/下午

1. SimpleDateFormat的构造器
构造器说明public SimpleDateFormat()构造一个SimpleDateFormat,使用默认格式public SimpleDateFormat(String pattern)构造一个SimpleDateFormat,使用指定的格式
  1. //1、日期对象
  2. Date date = new Date();
  3. System.out.println(date);  //Sat May 06 08:19:11 CST 2023
  4. // 2、格式化这个日期对象(指定最终格式化的形式)   EEE 代表去星期几  a 取上午还是下午
  5. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss  EEE a ");
  6. // 3、开始格式化日期对象成为字符串的形式
  7. String rs = sdf.format(date);
  8. System.out.println(rs);  //2023年05月06日 08:19:11  星期六 上午
  9. //4、格式化时间毫秒值
  10. //需求:121秒之后的时间是多少
  11. long time = System.currentTimeMillis()+121*1000;
  12. String rs2 = sdf.format(time);
  13. System.out.println(rs2);  //2023年05月06日 08:21:12  星期六 上午
复制代码
2. SimpleDateFormat的格式化方法
格式化方法说明public final String(Date date)将日期格式化成日期/时间字符串public final String(Object time)将时间毫秒值化成日期/时间字符串例子:3. SimpleDateFormat解析字符串时间成为日期对象解析方法说明public Date pasre(String source)从给定字符串的开始解析文本以生成日期
  1. package com.example.test.simpledateformat;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. public class Demo02 {
  6.     public static void main(String[] args) throws ParseException {
  7.         //SimpleDateFormat解析字符串时间成为日期对象
  8.         //计算出2021年08月06日11点11分11秒,往后走2天14小时49分06秒后的时间是多少??
  9.         // 1、把字符串时间拿到程序中来
  10.         String dateStr = "2021年08月06日 11:11:11";
  11.         // 2、把字符串时间解析成日期对象 !!形式必须与被解析时间的形式完全一样,否则运行时解析报错
  12.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  13.         Date d = sdf.parse(dateStr);
  14.         // 3、往后走2天14小时49分06秒
  15.         long time = d.getTime() + (2L*24*60*60+14*60*60+49*60+6)*1000;
  16.         // 4、格式化时间毫秒值
  17.         String rs = sdf.format(time);
  18.         System.out.println(rs);
  19.     }
  20. }
复制代码
2.2 总结


  • SimpleDateFormat可以格式化日期对象和时间毫秒值。
  • SimpleDateFormat调用parse方法对字符串时间进行解析,要求解析格式必须与被解析格式一样。
2.4 案例

需求

  • 活动开始时间:2021-11-11 00:00:00
  • 活动结束时间:2021-11-11 00:10:00
  • 小贾下单并付款的时间为:2020年11月11日 00:03:47
  • 小皮下单并付款的时间为:2022年11月11日 00:10:11
  • 用代码说明这两位同学有没有参加上秒杀活动?
  1. package com.example.test.simpledateformat;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. public class Demo03 {
  6.     public static void main(String[] args) throws ParseException {
  7.         // 1、开始和结束时间
  8.         String startTime = "2021-11-11 00:00:00";
  9.         String endTime = "2021-11-11 00:10:00";
  10.         // 2、记录小贾,小皮
  11.         String xiaoJia = "2021-11-11 00:03:47";
  12.         String xiaoPi = "2021-11-11 00:10:11";
  13.         // 3、解析时间
  14.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  15.         Date d1 = sdf.parse(startTime);
  16.         Date d2 = sdf.parse(endTime);
  17.         Date d3 = sdf.parse(xiaoJia);
  18.         Date d4 = sdf.parse(xiaoPi);
  19.         if(d3.after(d1) && d3.before(d2)){
  20.             System.out.println("小贾秒杀成功");
  21.         }else{
  22.             System.out.println("小贾秒杀失败");
  23.         }
  24.         if(d4.after(d1) && d4.before(d2)){
  25.             System.out.println("小皮秒杀成功");
  26.         }else{
  27.             System.out.println("小皮秒杀失败");
  28.         }
  29.     }
  30. }
复制代码
3 Calendar

3.1 Calendar概述


  • Calendar代表了系统此刻日期对应的日历对象。
  • Calendar是一个抽象类,不能直接创建对象
    Calendar日历类创建日历对象的方法
    public static Calendar getInstance():获取当前日历对象
3.2 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 getTimeMillis()拿到此刻时间毫秒值note:Calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。
3.3 案例

1. 案例1
  1. package com.example.test.calendar;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. public class Demo01 {
  5.     public static void main(String[] args) {
  6.         //1、拿到系统此刻日历对象
  7.         Calendar cal = Calendar.getInstance();
  8.         //2、 获取日期信息
  9.         int year = cal.get(Calendar.YEAR);
  10.         System.out.println(year);
  11.         int month = cal.get(Calendar.MONTH)+1;
  12.         System.out.println(month);
  13.         int days = cal.get(Calendar.DAY_OF_YEAR);  //一年中的第几天
  14.         System.out.println(days);
  15.         // 3、修改日历中某个字段信息
  16.         cal.set(Calendar.HOUR,12); //一般不会修改时间
  17.         // 请问64天后是什么是时间
  18.         cal.add(Calendar.DAY_OF_YEAR, 64);
  19.         // 拿到此刻日期对象
  20.         Date time = cal.getTime();
  21.         System.out.println(time);
  22.         // 拿到此刻日期毫秒值
  23.         long times = cal.getTimeInMillis();
  24.         System.out.println(times);
  25.     }
  26. }
复制代码
2. 案例2:获取指定日期加某几月之后的日期
  1. public class Demo02 {
  2.     public static void main(String[] args) throws ParseException {
  3.         String time = "2023-01-30";        //当前时间
  4.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  5.         Date currdate = format.parse(time);
  6.         System.out.println("初始的时间是:" + time);
  7.         Calendar ca = Calendar.getInstance();
  8.         ca.setTime(currdate);
  9.         ca.add(Calendar.MONTH, 1);
  10.         currdate = ca.getTime();
  11.         String enddate = format.format(currdate);
  12.         System.out.println("增加天数以后的时间:" + enddate);
  13.     }
  14. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表