本文介绍: Java早期通过使用Date计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念常见操作相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。

目录


前言

最近在实习过程遇到了许多处理日期时间相关需求例如时间的加减及时间格式的互相转换。Java早期通过使用Date计算时间,后来大部分Date类方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念常见操作相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。


一、Date类

1. 基本概念

java.util 包提供了 Date 类来封装当前日期和时间。 Date 类提供两个构造函数实例化 Date 对象

第一个构造函数使用当前日期和时间来初始化对象

Date( )

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。

Date(long millisec)

		Date date2= new Date();
        System.out.println(date2);


        //参数表示1970-01-01 00:00:00到指定时间的毫秒数
        Date date1 = new Date(14686531L);
        System.out.println(date1);

2. 常见方法

2.1 日期比较

Java使用以下三种方法比较两个日期:

  1. 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较两个值。
  2. 使用方法 before(),after() 和 equals()。例如一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true
  3. 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现这个接口

2.2 使用 SimpleDateFormat 格式化日期

因为使用Date类与字符串时间相互转化十分困难,因此,可以考虑通过Date类的其他子类来间接进行转换。DateFormat是日期/时间格式化子类的抽象类,它与以语言无关的方式格式化解析日期或时间,是抽象类。所以使用其子类SimpleDateFormat实现日期和字符串的相互转换。

public static void main(String[] args) throws Exception {

        // 定义输出格式   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将字符串转化为日期   
        Date date = sdf.parse("2023-11-11 11:11:11");
        System.out.println(date);

        Date date = new Date();
        // 将日期转化为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println(str);
    }

二、DateFormat类

1. 基本概念

java.text.DateFormat 是日期/时间格式化子类的抽象类我们通过这个类可以我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

2. 常见方法

2.1 构造方法

由于DateFormat抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式格式)来指定格式化解析标准构造方法为:

public SimpleDateFormat(String pattern):用给定模式默认语言环境的日期格式符号构造SimpleDateFormat

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

常用的格式规则为:

标识字母(区分大小写 含义
y
M
d
H
m
s

创建SimpleDateFormat对象的代码如下

import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Demo02SimpleDateFormat {
    public static void main(String[] args) {
        // 对应的日期格式如:2023-11-11 11:11:11
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}

2.2 DateFormat类常用方法

DateFormat类的常用方法有:

1. public String format(Date date):将Date对象格式化字符串。

format方法的代码如下

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}

2. public Date parse(String source)字符串解析为Date对象。

parse方法的代码如下

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2023年11月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2023
    }
}

三、Calendar

1. 基本概念

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象过程程序员来说是透明的,只需要使用getInstance方法创建即可

java.util.Calendar日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

2. 常用方法

2.1 构造方法

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建返回子类对象,如下

Calendar静态方法

例如

import java.util.Calendar;

public class Demo06CalendarInit {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
    }    
}

2.2 常用方法

根据Calendar类的API文档,常用方法有:

Calendar类中提供很多成员常量代表给定的日历字段:

字段值 含义
YEAR
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

1. get/set方法

get方法用来获取指定字段的值,set方法用来设置指定字段的值。代码例如下:

import java.util.Calendar;
public class Demo {
    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        // 获取年 
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
import java.util.Calendar;

public class Demo07CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 设置年
        cal.set(Calendar.YEAR, 2023);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}

2. add方法

add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量代码如:

import java.util.Calendar;

public class Demo08CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");

        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 5); // 加5天
        cal.add(Calendar.YEAR, -2); // 减2年
        // 获取年
        year = cal.get(Calendar.YEAR);
        // 获取月
        month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
    }
}

3. getTime方法:返回对应的Date对象

Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

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

public class Demo {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); 
    }
}

注意事项

  1. ​ 西方星期的开始为周日(1)周一(2),中国开始为周一,因此可以-1使用。
  2. ​ 在Calendar类中月份表示是以0-11代表1-12月(可以+1使用)。
  3. ​ 日期是有大小关系的,时间靠后,时间越大。

总结

 Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念常见操作相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。

原文地址:https://blog.csdn.net/Clearlove_S7/article/details/130442197

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29912.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注