【Java】—— 常用类和基础API:JDK8之前日期时间API的使用:Date、SimpleDateFormat、Calendar

目录

3. JDK8之前:日期时间API

3.1 java.lang.System类的方法

3.2 java.util.Date

3.3 java.text.SimpleDateFormat

3.4 java.util.Calendar(日历)

练习


3. JDK8之前:日期时间API

3.1 java.lang.System类的方法

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

    • 此方法适于计算时间差。

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

    • UTC(Coordinated Universal Time)

    • GMT(Greenwich Mean Time)

    • CST(Central Standard Time)

    在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。这里,UTC与GMT含义完全相同。

3.2 java.util.Date

表示特定的瞬间,精确到毫秒。

  • 构造器:

    • Date():使用无参构造器创建的对象可以获取本地当前时间。

    • Date(long 毫秒数):把该毫秒值换算成日期时间对象

  • 常用方法

    • getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数

    • toString(): 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。

    • 其它很多方法都过时了。

  • 举例:

package exer1;

import org.junit.Test;

import java.util.Date;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/9/28 16:22
 */
public class DateTimeTest {
    /**
     * Date类的使用
     *
     * /----java.util.Date
     *  >两个构造器的使用
     *  >两个方法的使用:① toString()   ② getTime()
     *
     *      /-----java.sql.Date:对应着数据库中的date类型
     */
    @Test
    public void test1(){
        Date date1 = new Date();    // 创建一个基于当前系统时间的Date的实例
        System.out.println(date1.toString());
        long time = date1.getTime();
        System.out.println("对应的毫秒数为:" + time);

        Date date2 = new Date(1727511995636L);  //创建一个基于指定时间戳的Date的实例
        System.out.println(date2.toString());


    }
}

运行结果:

3.3 java.text.SimpleDateFormat

  • java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。

  • 可以进行格式化:日期 --> 文本

  • 可以进行解析:文本 --> 日期

  • 构造器:

    • SimpleDateFormat() :默认的模式和语言环境创建对象

    • public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象

  • 格式化:

    • public String format(Date date):方法格式化时间对象date

  • 解析:

    • public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期

示例:

package exer1;

import org.junit.Test;

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

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/9/28 16:46
 */
public class SimpleDateTest {
    /**
     * SimpleDateFormat类:用于日期时间的格式化和解析
     *
     * 格式化:日期 -> 字符串
     * 解析: 字符串 -> 日期
     */
    @Test
    public void test3() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat();  // 空参构造器,使用默认格式
        // 格式化:日期 -> 字符串
        Date date1 = new Date();
        String strDate = sdf.format(date1);
        System.out.println(strDate);


        // 解析: 字符串 -> 日期
        Date date2 = sdf.parse("24-9-28 下午4:49");
        System.out.println(date2);
    }
}

运行结果:

3.4 java.util.Calendar(日历)

  • Date类的API大部分被废弃了,替换为Calendar。

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

  • 获取Calendar实例的方法

    • 使用Calendar.getInstance()方法

    • 调用它的子类GregorianCalendar(公历)的构造器。

  • 一个Calendar的实例是系统时间的抽象表示,可以修改或获取 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND等 日历字段对应的时间值。

    • public int get(int field):返回给定日历字段的值

    • public void set(int field,int value) :将给定的日历字段设置为指定的值

    • public void add(int field,int amount):根据日历的规则,为给定的日历字段添加或者减去指定的时间量

    • public final Date getTime():将Calendar转成Date对象

    • public final void setTime(Date date):使用指定的Date对象重置Calendar的时间

  • 常用字段

  • 注意:

    • 获取月份时:一月是0,二月是1,以此类推,12月是11

    • 获取星期时:周日是1,周二是2 , 。。。。周六是7

  • 示例代码:

package exer1;

import org.junit.Test;

import java.util.Calendar;
import java.util.Date;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/9/28 18:10
 */
public class CalendarTest {
    /**
     * Calendar:日历类
     * ① 实例化 由于Calendar是一个抽象类,所以我们需要创建其子类的实例,这里我们通过Calendar的静态方法
     *          getInstance()即可获取
     * ② 常用方法:get(int field) /  set(int field, xx) /  add(int field,xx)  /  getTime()  /  setTime()
     */
    @Test
    public void test(){
        Calendar calendar = Calendar.getInstance();

        System.out.println(calendar.getClass());    // 查看当前对象类是谁

        //测试方法
        // get(int field)
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天是这个月的第几天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 今天是这年的第几天

        //set(int field, xx)
        calendar.set(Calendar.DAY_OF_MONTH,15); // 将今天是这个月的第几天改为15
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //add(int field,xx)
        calendar.add(Calendar.DAY_OF_MONTH,3);  // 在原有的基础上加上3天
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        // getTime() : Calendar -->  Date
        Date time = calendar.getTime();
        System.out.println(time);

        // setTime():使用指定的Date重置Calendar
        Date date = new Date();
        calendar.setTime(date);  // 被重置了,下列输出为当前系统,是这个月的多少天
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    }
}

输出示例:

练习

1、如何将一个java.util.Date的实例转换为java.sql.Date的实例

package exer1;

import org.junit.Test;

import java.util.Date;

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/9/28 18:35
 */
public class Exer01 {
    /**
     * 练习:如何将一个java.util.Date的实例转换为java.sql.Date的实例
     *
     */
    @Test
    public void test(){
        Date date1 = new Date();

        java.sql.Date date2 = new java.sql.Date(date1.getTime());
        System.out.println(date2);
    }

}

运行结果:

2、拓展

将控制台获取的年月日(比如:2022-12-16)的字符串数据,转换为java.sqL.Date的对象
(字符串 --> java.util.Date --> java.sql.Date)
package exer1;

import org.junit.Test;

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

/**
 * ClassName:IntelliJ IDEA
 * Description:
 *
 * @Author zyjstart
 * @Create:2024/9/28 18:51
 */
public class Exer02 {
    /**
     * 拓展:
     *      将控制台获取的年月日(比如:2022-12-16)的字符串数据,转换为java.sqL.Date的对象
     *      字符串 --> java.util.Date --> java.sql.Date
     */
    @Test
    public void test() throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 指定格式
        String patter = "2022-12-16";
        // 得到java.util.Date的结果,解析:字符串 --> java.util.Date
        Date date1 = sdf.parse(patter);
        // 转换为java.sql.Date
        java.sql.Date date2 = new java.sql.Date(date1.getTime());
        System.out.println(date2);
    }
}
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值