Java常用类之日期操作类

日期操作类

程序开发中经常会遇到日期类型的操作,在Java中对于日期的操作也提供了良好的支持(真香,要什么有什么)

在Java中对日期的操作类常用的有以下4种:

  1. Date类
  2. Calendar类
  3. DateFormat类
  4. SimpleDateFormat类

一起来了解一下各个类如何使用的吧!!!

1. Date类

  1. Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已被Calendar类中的方法所取代。
  2. 时间单位:
    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微秒=1000纳秒
  3. 在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
    • 年份 y 由整数 y - 1900 表示。
    • 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
    • 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
    • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
    • 分钟按通常方式由 0 至 59 的整数表示。
    • 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

常用方法

方法 描述
boolean after(Date when) 测试此日期是否在指定日期之后。
boolean before(Date when) 测试日期是否在指定日期之前。
int compareTo(Date anotherDate) 比较两个日期的顺序。如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。
public long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

实例

import java.util.Date;

/**
 * @Description: Date类
 * 1.获取当前时间日期
 * 2.获取1900年至现在的毫秒数
 * 3.判断当前日期是否在2010年1月1日之前还是之后。
 * @author: 不懂语言的猿
 * @date: 2021-07-28
 */
public class dateDemo {
    public static void main(String[] args) {
        Date date = new Date();
        Date date1 = new Date(110, 01, 01);//该方法以过时,但仍可以使用,注意:year-1900;
        System.out.println("当前时间:"+date);
        System.out.println("毫秒数:"+date.getTime());
        if(date.compareTo(date1)==0){
            System.out.println("2010年1月1日");
        }else if(date.compareTo(date1)==1){
            System.out.println("2010年1月1日之后");
        }else {
            System.out.println("2010年1月1日之前");
        }
    }
}

运行结果

Java常用类之日期操作类_第1张图片

2. Calendar类

  1. Calendar提供了获取或设置各种日历字段的方法。

  2. 这个类本身是一个抽象类,可以依靠对象的多态性,通过子类进行父类的实例化操作。

  3. 由于修饰符为protected,所以也无法创建对象。但Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

    Calendar rightNow = Calendar.getInstance();
    

常用方法

方法 描述
static Calendar getInstance() 使用默认时区和区域获取日历
public final void set(int year,int month, int date, int hourOfDay,int minute,int second) 设置年、月、日、时、分、秒。
public int get(int field) 返回指定字段的值。字段如年、月、日等
void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
Date getTime() 返回一个表示此 Calendar 时间值的 Date 对象。
void add(int field,int amount) 按照日历的规则,给指定字段添加或减少时间
long getTimeMillies() 以毫秒为单位返回该日历的时间值。

Calendar类中的常量

常量 描述
public static final int YEAR 取得年
public static final int MONTH 取得月
public static final int DAY_OF_MONTH 取得日
public static final int HOUR_OF_DAY 取得小时,24小时制
public static final int MINUTE 取得分
public static final int SECOND 取得秒
public static final int MILLISECOND 取得毫秒

实例

import java.util.Calendar;
import java.util.GregorianCalendar;

import static java.util.Calendar.MONTH;

/**
 * @Description: Calendar类
 * 1.返回当前时间及毫秒值
 * 2.返回月份
 * 3.返回昨天这个时刻
 * @author: 不懂语言的猿
 * @date: 2021-07-29
 */
public class Main {
    public static void main(String[] args) {
        Calendar calendar=Calendar.getInstance();//用其提供的方法获得对象
        //Calendar calendar=new GregorianCalendar();//用其子类得到对象
        //注意这里调用了Date类中的toLocalString方法得到一个能看懂的时间
        System.out.println("时间:"+calendar.getTime().toLocaleString());
        System.out.println("毫秒值:"+calendar.getTimeInMillis());
        System.out.println("月份:"+(calendar.get(MONTH)+1));//这里的月是从0-11,所以要加1
        Calendar calendar1 = Calendar.getInstance();
        calendar1.add(Calendar.DAY_OF_MONTH,-1);
        System.out.println("昨天这个时刻:"+calendar1.getTime().toLocaleString());
    }
}

运行结果

Java常用类之日期操作类_第2张图片

3.DateFormat类

在java.util.Date类中取得的时间是一个非常正确的时间,但是由于其显示的格式不理想,所以无法符合中国人的习惯,所以对其进行相应的格式化。

public abstract class DateFormatextends extends Format

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。

DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。

通过定义上看DateFormat类是一个抽象类,所以无法进行直接进行实例化,可以通过它提供的静态方法,来获取这个类的实例。

DateFormat df = DateFormat.getDateInstance();

常用方法

方法 描述
public static final DateFormat getDateInstance() 得到默认的对象
public static final DateFormat getDateInstance(int style,Locale aLocale) 根据Locale得到对象
public static final DateFormat getDateTimeInstance() 得到日期时间对象
public static final DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale aLocale) 根据Locale得到日期时间对象

实例:

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * @Description: DateFormat类
 * @author: 不懂语言的猿
 * @date: 2021-07-29
 */
public class Main2 {
    public static void main(String[] args) {
        DateFormat df1 = DateFormat.getDateInstance();
        DateFormat df2 = DateFormat.getDateTimeInstance();
        DateFormat df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale("zh", "CN"));
        DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD, DateFormat.ERA_FIELD,new Locale("zh",
                "CN"));
        System.out.println(df1.format(new Date()));
        System.out.println(df2.format(new Date()));
        System.out.println(df3.format(new Date()));
        System.out.println(df4.format(new Date()));
    }
}

运行结果:

Java常用类之日期操作类_第3张图片

4.SimpleDateFormat类

如果要得到用户自己需要的日期显示格式,则必须通过DateFormat的子类SimpleDateFormat类。

常用方法

方法 描述
public Date parse(String source)throws ParseException 将一个包含日期的字符串变为Date类型
public final String format(Date date) 将一个Date类型按照指定格式变为String类型

实例

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

/**
 * @Description: SimpleDateFormat类
 * 将格式为yyyy-MM-dd HH:mm:ss的时间转为yyyy年MM月dd日 HH时mm分ss秒
 * @author: 不懂语言的猿
 * @date: 2021-07-29
 */
public class Main3 {
    public static void main(String[] args) throws ParseException {
        String date = "2020-10-01 17:39:15";
        String pat1 = "yyyy-MM-dd HH:mm:ss";
        String pat2 = "yyyy年MM月dd日 HH时mm分ss秒";
        SimpleDateFormat sdf = new SimpleDateFormat(pat1);
        SimpleDateFormat sdf1 = new SimpleDateFormat(pat2);
        Date da = sdf.parse(date);//将字符串data中的日期提取出来
        System.out.println(sdf1.format(da));
    }
}

运行结果

在这里插入图片描述

总结

  1. 目前个人遇到的对日期的操作,一般用的最多的就是对日期进行格式化,个人认为SimpleDateFormat类用起来更方便。

  2. 在上面提到的类中有很多方法(比如,Date类中许多过时的方法在开发中也是常常用到)这里只是学习了一些基础的知识,能够对日期进行简单的操作及格式化。后期如果用到的话,会进行深入的了解学习。

如有错误,欢迎指正!!!

你可能感兴趣的:(Java常用类,java,date)