java时间日期类

时间日期类

  • 计算机中时间原点

    1970年1月1日 00:00:00

  • 时间换算单位

    1秒 = 1000毫秒

  • Date类概述

    Date 代表了一个特定的时间,精确到毫秒

  • Date类构造方法

原因:
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。
随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。
1970年1月1日 算C语言的生日

long time = System.currentTimeMillis();System.out.println(time);//1575465416955

小结:
1,北京时间需要在世界标准时间上加8小时。
2,1秒=1000毫秒
3,计算机中的时间原点为:1970年1月1日 00:00:00

1.1 Date 类概述和构造方法

  • Date类概述

    • Date 代表了一个特定的时间,精确到毫秒
  • Date类构造方法

方法名说明
public Date()创建一个Date对象,表示默认时间
public Date(long date)创建一个Date对象,表示指定时间

Date date1 = new Date();

把当前时间封装成一个Date对象

Date date2 = new Date(0L);

把从时间原点开始,过了指定毫秒的时间,封装成一个Date对象
需要考虑时差问题。

案例:示例代码

package com.itheima.mydate;

import java.util.Date;

public class DateDemo1 {
    public static void main(String[] args) {
//        public Date()		创建一个Date对象,表示默认时间
//public Date(long date)	创建一个Date对象,表示指定时间

        //如果用空参构造创建对象 那么这个时间就表示电脑中的当前时间。
        Date date1 = new Date();
        System.out.println(date1);

        //如果用有参构造创建对象 从计算机的时间原点开始,过了指定毫秒的那个时间。
        Date date2 = new Date(0L);
        System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
        //从时间原点开始,过了0毫秒。
        //因为我们是在中国,我们是在东八区需要+8小时。

        //1970年1月1日 上午的9点
        Date date3 = new Date(3600L * 1000);
        System.out.println(date3);
    }
}

1.2 Date 类的常用方法(应用)

  • 常用方法
方法名说明
public long getTime()获取时间对象的毫秒值
public void setTime(long time)设置时间,传递毫秒值
package com.itheima.mydate;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo2 {
    public static void main(String[] args) {
//        public long getTime()			获取时间对象的毫秒值
//        public void setTime(long time)		设置时间,传递毫秒值

        //method1();
        //method2();

    }

    private static void method2() {
        //创建日期对象
        Date date1 = new Date();
        date1.setTime(0L);
        System.out.println(date1);
    }

    private static void method1() {
        //把当前时间封装成一个date对象
        Date date1 = new Date();
        //获取这个date对象的毫秒值 --- 获取当前时间的毫秒值
        long time = date1.getTime();
        System.out.println(time);

        long time2 = System.currentTimeMillis();
        System.out.println(time2);
    }
}

1.3 SimpleDateFormat 类

  • SimpleDateFormat类概述
    • SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。

    • 我们重点学习日期格式化和解析

SimpleDateFormat 可以对Date对象,进行格式化和解析

常用的模式字母及对应关系如下:
y 年
M 月
d 日
H 时
m 分
s 秒

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

2020年11月11日 13:27:06 yyyy年MM月dd日 HH:mm:ss

  • SimpleDateFormat 的构造方法
方法名说明
public SimpleDateFormat()构造一个SimpleDateFormat,使用默认格式
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat,使用指定的格式
  • SimpleDateFormat类的常用方法

    • 格式化(从Date到String)
      • public final String format(Date date):将日期格式化成日期/时间字符串
    • 解析(从String到Date)
      • public Date parse(String source):从给定字符串的开始解析文本以生成日期

案例:格式化(从 Date 到 String )

package com.itheima.mydate;

import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo3 {
    public static void main(String[] args) {
        //当前时间的Date对象
        Date date = new Date();
        
        //创建了一个日期格式。  构造一个SimpleDateFormat,使用指定的格式
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //public final String format(Date date):将日期格式化成日期/时间字符串
        String result1 = sdf.format(date);
        System.out.println(result1);
    }
}

案例:解析(从 String 到 Date )

package com.itheima.mydate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo4 {
    public static void main(String[] args) throws ParseException {
        //创建格式
        String s = "2048-01-01";
        //解析字符串的格式必须得要和的创建的格式一模一样  不然会报错
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //public Date parse(String source):从给定字符串的开始解析文本以生成日期
        Date date = sdf.parse(s);
        System.out.println(date);
    }
}
案例:秒杀活动
  • 需求

    秒杀开始时间是2020年11月11日 00:00:00,结束时间是2020年11月11日 00:10:00,用户小贾下单时间是2020年11月11日 00:03:47,用户小皮下单时间是2020年11月11日 00:10:11,判断用户有没有成功参与秒杀活动

  • 实现步骤

    1. 判断下单时间是否在开始到结束的范围内
    2. 把字符串形式的时间变成毫秒值
  • 代码实现
package com.itheima.mydate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo5 {
    public static void main(String[] args) throws ParseException {
        //开始时间:2020年11月11日 0:0:0
        //结束时间:2020年11月11日 0:10:0
        //小贾2020年11月11日 0:03:47
        //小皮2020年11月11日 0:10:11
        //1.判断两位同学的下单时间是否在范围之内就可以了。
        //2.要把每一个时间都换算成毫秒值。
        String start = "2020年11月11日 0:0:0";
        String end = "2020年11月11日 0:10:0";
        
        String jia = "2020年11月11日 0:03:47";
        String pi = "2020年11月11日 0:10:11";
        //创建格式   构造一个SimpleDateFormat,使用默认格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        //public Date parse(String source):从给定字符串的开始解析文本以生成日期
        //public long getTime()  获取时间对象的毫秒值
        //开始时间的毫秒值
        long startTime = sdf.parse(start).getTime();
        //结束时间的毫秒值
        long endTime = sdf.parse(end).getTime();
        //小贾下单并付款的毫秒值
        long jiaTime = sdf.parse(jia).getTime();
        //小皮单并付款的毫秒值
        long piTime = sdf.parse(pi).getTime();

        if(jiaTime >= startTime && jiaTime <= endTime){
            System.out.println("小贾同学参加上了秒杀活动");
        }else{
            System.out.println("小贾同学没有参加上秒杀活动");
        }
        System.out.println("------------------------");
        if(piTime >= startTime && piTime <= endTime){
            System.out.println("小皮同学参加上了秒杀活动");
        }else{
            System.out.println("小皮同学没有参加上秒杀活动");
        }
    }
}

SimpleDateFormat 小结:

  1. 格式化(从 Date 到 String )
    public final String format(Date date): 把时间按照固定格式进行展示

  2. 解析(从 String 到 Date )
    public Date parse(String source):需要对时间进行计算

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值