Java API(十三):Date类、SimpleDateFormat类、Calendar类


Java API

包含Date类简介、Date类常用方法(getTime、setTime)、SimpleDateFormat类及常用的方法(format、parse)、Calendar类简介、Calendar类常用方法(getTime、setTime、get、set、add、getActualMaximum)。


一、Date类

1、Date类简介

1)java.util.Date类用于封装日期及时间信息

2)Date的每一个实例用于表示一个确切的时间点

3)内部维护了一个long值,该值记录的是从:1970年1月1日00:00:00到当前的时间之间所经历的毫秒值

4)正数是70年以后的日期,负数是70年之前的日期

5)由于Date设计存在缺陷(时区,千年虫),所以它的大部分方法被设置为“过时的”,不再建议使用

2、Date类常用方法

1)使用默认构造方法创建的Date表示当前系统日期及时间信息

Date now = new Date();

2)Date重写了toString,返回的字符串显示的就是当前Date表示的时间。格式:Mon May 02 22:25:34 GMT+08:00 2022

System.out.println(now); //Mon May 02 23:05:00 GMT+08:00 2022

(1)、getTime

long getTime()方法用户获取对应的毫秒数,即1970年1月1日到此时此刻经历的毫秒

Date now = new Date();
System.out.println(now.getTime()); //1651931455737

(2)、setTime

void setTime(long)方法通过毫秒数设置时间

public class Test {
    public static void main(String[] ages){
        Date now = new Date();
        System.out.println(now.getTime()); //1651931455737
        long time = now.getTime()+1000*24*60*60;
        now.setTime(time);
        System.out.println(now); //Sun May 08 21:59:55 GMT+08:00 2022
    }
}

二、SimpleDateFormat类

java.text.SimpleDateFormat类,根据一个给定的日期格式将String与Date相互转换

SimpleDateFormat(String pattern)

pattern参数用于说明给定的日期格式

1、日期格式

常用的日期格式

字符含义示例
yyyyy年——2022年;yy年——22年
MMM月——01月;M月——1月
ddd日——06日;d日——6日
E星期E——星期日(Sun)
aAM或PM标识a——下午(PM)
H小时(24小时制)HH时——24时
h小时(12小时制)a h时——下午 12时
m分钟HH:mm:ss——12:22:22
shh(a):mm:ss——12(下午):22:22

2、SimpleDateFormat类常用方法

(1)、format

String format(Date date)方法可以将给定的date对象所表示的时间按照SimpleDateFormat指定的日期格式转换为字符串

public class Test {
    public static void main(String[] ages){
        Date now =  new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = sdf.format(now);
        System.out.println(str); //2022-05-07 22:08:27
    }
}

(2)、parse

Date parse(String str)将给定的字符串按照SimpleDateFormat指定的日期格式解析为一个Date对象

public class Test {
    public static void main(String[] ages) throws ParseException {
        String str = "2008-04-22 20:12:22";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(str); //parse方法需要异常处理
        System.out.println(date); //Tue Apr 22 00:00:00 GMT+08:00 2008
    }
}

如果字符串的格式与指定的日期格式不匹配,parse方法将抛出异常:java.text.ParseException

三、Calendar类

1、Calendar类简介

1)java.util.Calendar 日历类,用于封装日历信息

2)该类是一个抽象类,封装了对时间的相关操作,具体子类针对不同国家的日历系统

3)常用的实现类是GregorianCalendar格里高里历(阳历)

4)使用日历类是为了对时间进行相关的操作。比如计算时间

2、Calendar类常用方法

1)使用Calendar的静态方法getInstance创建实例对象,该方法会根据当前系统是在地区创建一个相应的实现

2)通常是GregorianCalendar(阳历),默认创建的日历实例表示当前系统时间

Calendar calendar = Calendar.getInstance();

(1)、getTime

Date getTime()方法返回一个Date对象,该对象表示的时间是当前Calendar表示的时间

Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(date); //Sun May 08 07:37:47 GMT+08:00 2022

(2)、setTime

void setTime(Date date)方法可以使当前Calendar表示给定的Date所表示的时间

calendar.setTime(date);
System.out.println(date); //Sun May 08 07:37:47 GMT+08:00 2022

(3)、get

1)int get(int field)方法获取对应时间分量的值

2)时间分量可以是:Calendar.YEAR、Calendar.MONTH、Calendar.DATE、Calendar.DAY_OF_WEEK、Calendar.HOUR_OF_DAY、Calendar.MINUTE、Calendar.SECOND…

public class Test {
    public static void main(String[] ages) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR); //获取年
        int month = calendar.get(Calendar.MONTH)+1; //获取月,月从0开始,所以需要加1
        int day = calendar.get(Calendar.DATE); //获取日
        int hour = calendar.get(Calendar.HOUR_OF_DAY); //获取小时
        int minute = calendar.get(Calendar.MINUTE); //获取分钟
        int second = calendar.get(Calendar.SECOND); //获取秒数
        System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);

        int week = calendar.get(Calendar.DAY_OF_WEEK); //在美国,每周的第一天为星期日
        System.out.println("星期"+(week==1?7:week-1)); //判断week是否等于1,等于1返回周的第一天(星期7),否则返回week-1
        String[] str = new String[]{"日","一","二","三","四","五","六"};
        System.out.println("星期"+str[week-1]);
    }
}

(4)、set

1)void set(int field,int value)方法设置对应时间分量的值

2)第一个参数为:时间分量,例如:年,月,日等等,第二个参数为对应的值

3)时间分量是一个int值,使用Calendar提供的常量

4)常用的时间分量:

  • DATE:月中的天

  • DAY_OF_MONTH:月中的天,月DATE一致

  • DAY_OF_WEEK:周中的天,星期几

  • DAY_OF_YEAR:年中的天

public class Test {
    public static void main(String[] ages) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime()); //Sun May 08 07:57:08 GMT+08:00 2022

        calendar.set(calendar.YEAR,2008);
        calendar.set(Calendar.MONTH,calendar.AUGUST);
        calendar.set(Calendar.MONTH,7); //7代表八月
        calendar.set(Calendar.DAY_OF_MONTH,8); //设置日
        calendar.set(Calendar.HOUR_OF_DAY,20); //设置时
        calendar.set(Calendar.MINUTE,8); //设置分
        calendar.set(Calendar.SECOND,8); //设置秒
        System.out.println(calendar.getTime()); //Fri Aug 08 20:08:08 GMT+08:00 2008
    }
}

(5)、add

void add(int field,int value)方法对指定的时间分量加上给定的值,若给定的值是负值,则是减去给定的值

public class Test {
    public static void main(String[] ages) throws ParseException {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime()); //Sun May 08 08:06:37 GMT+08:00 2022

        calendar.add(Calendar.YEAR,3); //增加三年
        calendar.add(Calendar.MONTH,2); //增加两月
        calendar.add(Calendar.DAY_OF_YEAR,8); //添加日需用DAY_OF_YEAR,加天数可能会跨月
        calendar.add(Calendar.HOUR_OF_DAY,-5); //五小时前
        System.out.println(calendar.getTime()); //Wed Jul 16 03:06:37 GMT+08:00 2025
    }
}

(6)、getActualMaximum

int getActualMaximum(int field)方法获取某一个时间分量所运行的最大值

public class Test {
    public static void main(String[] ages) throws ParseException {
        Calendar calendar = Calendar.getInstance();

        int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //查看当月共多少天
        int days01 = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); //查看今年共多少天
        System.out.println("今年有"+days01+"天,这个月有"+days+"天");
    }
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值