java---日期类汇总

java中常用的日期类有Date,SimpleDateFormat,Calendar这三种,现在分别对三个类的日常使用进行大概的总结:

1.Date类

1.1 基本介绍

一般常用的事Java.util.Date包下的Date类,在java.sql.Date包下也有一个Date类,sql包下的Date类主要用于和数据库打交道,其内容只包括日期,没有时间,util包下的Date类用于平常日期使用,其内容包括日期和时间。Date类表示系统特定的时间戳,可以精确到毫秒。Date类中的大部分方法都过时了,或者被Calendar类中的方法所取代。

1.2 构造方法

Date类有两个构造方法,Date对象表示时间的默认顺序是 星期,月,日,小时,分,秒,年

  • 无参构造方法Date():此种形式表示分配一个Date对象,并初始化,以便他代表被分配的时间,精确到毫秒,使用该构造方法创建的对象可以获取本地的当前时间。
  • 带参数的构造方法Date(long date):此种形式表示分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数(也就是从GMT(格林尼治时间)时间1970年1月1日0时0分0秒开始经过参数date指定的毫秒数

源码:

private transient long fastTime;

public Date() {
    this(System.currentTimeMillis());
}

public Date(long date) {
        fastTime = date;
}

import java.util.Date;

Date date = new Date();
System.out.println(date);
//输出结果:
Fri Aug 11 14:32:19 CST 2023

long date=3*24*60*60*1000;//1秒=1000毫秒,该时间为一天24小时
Date d2=new Date(date);
System.out.println(d2);//输出从GMT基准时间过了3天后的时间
//输出:Sun Jan 04 08:00:00 CST 1970(中央标准时间)

 1.3常用方法

  • boolean after(Date date):判断调用此方法的Date对象是否在指定日期之后
  • boolean before(Date date):判断调用此方法的Date对象是否在指定日期之前
  • int compareTo(Date date):比较调用此方法的Date对象与指定的日期,两者相等时返回0,调用对象在指定对象日期之前返回负数,反之返回正数
  • boolean equals(Object date):当调用此方法的Date对象与指定日期相等时,返回true,否则返回false
  • long getTime():返回自1970年1月1日0时0分0秒以来,此Date对象表示的毫秒数
  • String toString():获取当前日期和时间并用一下形式的输出:“ dow mon dd hh:mm:ss zzz yyy”,dow:一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat)
//public Date():分配一个Date对象,并初始化,以便他代表他被分配的时间,精确到毫秒
Date d1=new Date();
System.out.println(d1);
 
//public Date(long date):分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
long date=24*60*60*1000;
Date d2=new Date(date);
System.out.println(d2);

System.out.println(d2.after(d1));//输出:false
System.out.println(d2.before(d1));//输出:true
System.out.println(d2.compareTo(d1));//输出:-1
System.out.println(d2.equals(d1));//输出:false
System.out.println(d2.getTime());//输出:86400000=24*60*60*1000
System.out.println(d2.toString());//输出:Fri Jan 02 08:00:00 CST 1970

2.SimpleDateFormat类

因为使用Date类与字符串时间相互转化十分困难,因此考虑使用Date类的其他子类。

DateFormat是日期/时间格式化子类的抽象类,他与以语言无关的方式格式化与解析日期活时间,是抽象类,所以使用其子类SimpleDateFormat实现日期与字符串的相互转换。

2.1 常用的模式字母以及对应关系

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A’到'Z'以及'a'-'z'引导的字母被解释为表示日期或者时间字符串的组件的模式字母,对应关系:

y
M
d
H
m
s

2.2 构造方法

  • 无参构造方法

public SimpleDateFormate():使用默认模式和日期格式

  • 有参构造方法

public SimpleDateFormate(String pattern):使用给定的模式和默认的日期格式

//源代码

//无参构造
public SimpleDateFormat() {
        this("", Locale.getDefault(Locale.Category.FORMAT));
        applyPatternImpl(LocaleProviderAdapter.getResourceBundleBased().getLocaleResources(locale)
                         .getDateTimePattern(SHORT, SHORT, calendar));
    }


//Params:
//pattern – the pattern describing the date and time format
//Throws:NullPointerException – if the given pattern is null
//IllegalArgumentException – if the given pattern is invalid
//See Also:
//Locale.getDefault(Locale.Category), Locale.Category.FORMAT
//有参构造
public SimpleDateFormat(String pattern)
    {
        this(pattern, Locale.getDefault(Locale.Category.FORMAT));
    }

    private void applyPatternImpl(String pattern) {
        compiledPattern = compile(pattern);
        this.pattern = pattern;
    }

2.3 成员方法:

  • 格式化(从Date转换为String)

方法:public final String format(Date date):将日期格式化为日期/时间字符串,示例代码如下:

Date d=new Date();
//无参构造
SimpleDateFormat sdf=new SimpleDateFormat();
String s=sdf.format(d);
System.out.println(s);
//输出:2022/10/15 下午3:04

//有参构造
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s2=sdf.format(d);
System.out.println(s2);
//输出:2022年10月15日 15:19:11
  • 解析(从String转化为Date)

方法:public Date parse(String source):从给定的字符串,解析文本以生成Date对象

String ss="2022-10-15 15:15:36";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd=new Date();
dd=sdf.parse(ss);
System.out.println(dd);
//输出:Sat Oct 15 15:15:36 CST 2022

3.Calendar类

java开发Calendar类的目的是为了替换Date类,还是该类的设计依然相当失败,只有几个方法值得试用一下啊。

Calendar类是java.util包中提供的一个抽象类,该类从JDK1.1开始出现,作为Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理,Calendar类常见的子类为:java.util.GregorianCanlendar,获取Calendar对象一般使用类中的静态方法:getInstance(),该方法返回了Calendar的子类对象

3.1静态变量

Calendar.YEAR //表示年份
 
Calendar.MONTH //表示月份
 
Calendar.DATE //表示当前时间为多少号(日历式的多少号)
 
Calendar.HOUR //表示小时(12小时制)
 
Calendar.HOUR_OF_DAY //表示小时(24小时制)
 
Calendar.MINUTE //表示分钟数
 
Calendar.SECOND //表示秒数
 
Calendar.MILLENSECOND //表示毫秒数
 
Calendar.WEEK_OF_MONTH //当前时间是所在当前月的第几个星期(日历式的第几周)
 
Calendar.WEEK_OF_YEAR //当前时间是所在当前年的第几个星期
 
Calendar.DAY_OF_WEEK_IN_MONTH //当前时间是所在当前月的第几个星期,以月份天数为标准,一个月的1号为第一周,8号为第二周
 
Calendar.DAY_OF_WEEK //一周七天中,当前时间是一周中的第几天
 
Calendar.DAY_OF_YEAR //表示一年中的第几天
 
Calendar.DAY_OF_MONTH //表示一个月中的第几天,结果等同于Calendar.DATE
 
Calendar.AM_PM //表示是上午还是下午
 
Calendar.SUNDAY //周日
 
Calendar.MONDAY //周一
 
Calendar.TUESDAY //周二
 
Calendar.WEDNSDAY //周三
 
Calendar.THURSDAY //周四
 
Calendar.FRIDAY //周五
  
Calendar.SATURDAY //周六

 3.2 常用方法

  • public static Calendar getInstance():创建Calendar类型的子类对象
  • public int get(int filed):根据日历字段,获取对应的值(field一般是上边所提到的静态变量)
  • public final void set(**):设置时间,有多个重载,设置单字段/年月日/年月日时分/年月日时分秒
  • public abstract void add(int field,int amount):根据日历规则,将指定的时间量添加或者减去给定的日历字段
  • Date getTime():返回一个Date表示日历的时间

代码样例:

Calendar c= Calendar.getInstance();

int year=c.get(Calendar.YEAR);
System.out.println(year+"年");
//输出:2023年

Calendar c2= Calendar.getInstance();
c2.set(2018, 2, 14);
year=c2.get(Calendar.YEAR);
month=c2.get(Calendar.MONTH);
date=c2.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2018年2月14日
c2.set(Calendar.DATE,2);
date=c2.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2018年2月2日

//3年后的今天
Calendar c3= Calendar.getInstance();
c3.add(Calendar.YEAR, 3);
year=c3.get(Calendar.YEAR);
month=c3.get(Calendar.MONTH)+1;
date=c3.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2026年8月14日
 
//13年后的五天前
c3.add(Calendar.YEAR, 10);
c3.add(Calendar.DATE, -5);
year=c3.get(Calendar.YEAR);
month=c3.get(Calendar.MONTH)+1;
date=c3.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");
//输出:2036年8月9日

Calendar c=Calendar.getInstance();
Date d=c.getTime();
System.out.println(d);
//输出:Mon Aug 14 10:32:07 CST 2023

猜你喜欢

转载自blog.csdn.net/mao_mao37/article/details/132229552