Java027——日期时间类&日历类

一、初始化时间对象的两种方式

Java的日期时间类在 java.util.Date包中,Date 类用于表示日期时间,使用该类表示时间需要先使用其构造方法创建对象

1.1、Date 类提供两个构造方法来实例化 Date 对象。

Date() 无参构造函数使用当前日期和时间来初始化对象。
Date(long millisec) 有参构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。

示例演示

class test {
    public static void main(String[] args) {
        Date date1 = new Date();//调用Date无参构造,初始化一个时间对象
        System.out.println(date1);

        long nowTime =  System.currentTimeMillis();//当前系统时间所经历的毫秒数
        System.out.println(nowTime);
        
        Date date2 = new Date(newTime);//使用毫秒数作为参数,调用Date有参构造初始化一个时间对象
        System.out.println(date2);
    }
}

//运行结果
Tue Jul 11 15:08:41 CST 2023
1689059321476
Tue Jul 11 15:08:41 CST 2023

二、Date 类的常用方法

----------------------------------------------------------------------------------------------------------------------
     方法 				| 						说明 
----------------------------------------------------------------------------------------------------------------------
 getTime() 				| 		获得自 19701100:00:00 GMT 开始到现在所经过的毫秒数 
 toString()						把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一			
								天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。								
----------------------------------------------------------------------------------------------------------------------
//下面的很少使用,了解即可
 after(Date when) 		| 		测试当前日期是否在指定的日期之后 
 before(Date when) 		| 		测试当前日期是否在指定的日期之前 
 setTime(long time) 	| 		设置当前 Date 对象所表示的日期时间值,该值用以表示19701100:00:00 GMT 以后time毫秒的时间点 

示例演示

class test {
    public static void main(String[] args) {
        Date date1 = new Date();
        System.out.println("日期:" + date1);
        System.out.println("日期toString():" + date1.toString());

        long nowTime = date1.getTime();//当前系统时间所经历的毫秒数
        System.out.println("自 1970 年 1 月 1 日 00:00:00 GMT 以来经历了" + nowTime + "毫秒");
    }
}

//运行结果
日期:Wed Jul 12 10:50:24 CST 2023
日期toString()Wed Jul 12 10:50:24 CST 202319701100:00:00 GMT 以来经历了1689130224202毫秒

三、日期时间格式化

3.1、String.format()

3.1.1、日期格式化

													常用的日期转换格式符
=======================================================================================================================
转换符						说明															示例
-----------------------------------------------------------------------------------------------------------------------
%tY					4位年份																2023
%ty					2位年份																23
%tm					月份																	05
%te					一个月中的某一天(1~3110
%td					一个月中的第几天(1~3103
%tj					一年中的第几天(1~366020
%tb					指定语言环境的月份简称										Feb(英文)、二月(中文)
%tB					指定语言环境的月份全称										February(英文)、二月(中文)
%ta					指定语言环境的星期简称										Mon(英文)、星期一(中文)
%tA					指定语言环境的星期全称										Monday(星期一)、星期一(中文)
%tc					包括全部日期和时间信息										星期六  六月  10  09:10:20 CST 2023

=======================================================================================================================

示例

class test {
    public static void main(String[] args) {
        Date date = new Date();//初始化一个时间日期对象,使用无参构造函数表示获取的是当前系统时间
        
        //获取年、月、日、周
        String year = String.format("%tY", date);
        String month = String.format("%tb", date);
        String day = String.format("%te", date);
        String week = String.format("%tA", date);
        
        //输入结果
        System.out.println("今天是" + year + "年" + month + day + "日");
        System.out.println("今天是:" + week);
    }
}

//运行结果
今天是2023年七月12日
今天是:星期三

3.1.2、时间格式化

						    常用的时间格式转换符
===================================================================================
转换符					说明							示例
-----------------------------------------------------------------------------------
%tH			2位数字的24时制的小时(00~2313
%tI			2位数字的12时制的小时(00~2301
%tM			2位数字的分钟(00~5905
%tS			2位数字的秒数(00~6012
%tL			3位数字的毫秒(000~999666
%tp			指定语言环境下的上午或下午标记				下午(中文)、pm(英文)
%tZ			时区缩写形式的字符串						CST
===================================================================================

示例

class test {
    public static void main(String[] args) {
        Date date = new Date();

        String hour = String.format("%tH", date);
        String minute = String.format("%tM", date);
        String second = String.format("%tS", date);

        System.out.println("现在是:" + hour + "点" + minute + "分" + second + "秒");

        String hour2 = String.format("%tI", date);
        String pm = String.format("%tp", date);

        System.out.println("现在是:" + pm + hour2 + "点" + minute + "分" + second + "秒");
    }
}

//运行结果
现在是:102717秒
现在是:上午102717

3.1.3、常见的日期和时间组合的格式

===============================================================
转换符			说明							示例
---------------------------------------------------------------
%tF				"年-月-日"格式				2021-05-09
%tD				"月/日/年"格式				05/09/2021
%tT				"时:分:秒" 24时制			08:20:42
%tR				"时:分" 24时制				08:20
===============================================================

示例

class test {
    public static void main(String[] args) {
        Date date = new Date();
        
        String time = String.format("%tc", date);
        String form = String.format("%tF", date);
        String form2 = String.format("%tD", date);
        String form3 = String.format("%tr", date);
        String form4 = String.format("%tT", date);
        String form5 = String.format("%tR", date);
        
        System.out.println("完整的时间信息是:" + time);
        System.out.println("年-月-日格式:" + form);
        System.out.println("年/月/日格式:" + form2);
        System.out.println("时:分:秒 PM(AM)格式:" + form3);
        System.out.println("时:分:秒格式:" + form4);
        System.out.println("时:分格式:" + form5);
    }
}

//运行结果
完整的时间信息是:星期三 七月 12 10:30:57 CST 2023--日格式:2023-07-12//日格式:07/12/23
时:分:秒 PM(AM)格式:10:30:57 上午
时:分:秒格式:10:30:57
时:分格式:10:30

3.2、DateFormat

class test {
    public static void main(String[] args) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yy年MM月dd日");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分");
        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");
        SimpleDateFormat sdf5 = new SimpleDateFormat("今年已经过了DDD天,快w个星期,现在是这个月的第W个星期");
        SimpleDateFormat sdf6 = new SimpleDateFormat("现在是E");
        
        String date1 = sdf1.format(new Date());
        String date2 = sdf2.format(new Date());
        String date3 = sdf3.format(new Date());
        String date4 = sdf4.format(new Date());
        String date5 = sdf5.format(new Date());
        String date6 = sdf6.format(new Date());
        
        System.out.println(date1);
        System.out.println(date2);
        System.out.println(date3);
        System.out.println(date4);
        System.out.println(date5);
        System.out.println(date6);
    }
}

//运行结果
2307122023071220230712103320230712103323秒
今年已经过了193天,快28个星期,现在是这个月的第3个星期
现在是星期三

3.3、SimpleDateFormat 类

3.3.1、SimpleDateFormat 类基本构造方法:

SimpleDateFormat 类是DateFormat 类的一个子类。

new SimpleDateFormat();默认模式和默认日期格式符号创造。
SimpleDateFormat(String pattern);使用指定的模式和默认日期格式符号创造。
SimpleDateFormat(String pattern, Locale locale);使用指定的模式和指定语言环境的默认日期符号构造。

								代表日期和时间的模式元素字母:
====================================================================================================================
字母					含义															示例
--------------------------------------------------------------------------------------------------------------------
y				年,												一个y代表一位	"yyy"代表019"yyyy"代表2019
M				月份												例如八月,M代表8MM代表08
w				一年中的第几周									常用ww表示
W				一个月中的第几周									常用WW表示
d				一个月中的第几天									常用dd表示
D				一年中的第几天									常用DDD表示
E				星期几,用E表示星期,根据不同语言环境返回			CHINA表示星期几,US表示英文缩写
a				上午或下午										am代表上午,pm代表下午
H				一天中的小时数,二十四小时制						常用HH表示
h				一天中的小时数,十二小时制							常用hh表示
m				分钟数											常用mm表示
s				秒数												常用ss表示
S				毫秒数											常用SSS表示
====================================================================================================================

示例

class test {
    public static void main(String[] args) {
        SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
        SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()
        SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
        SimpleDateFormat myFmt4=new SimpleDateFormat(
                "一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
        Date now=new Date(); // 现在的日期

        // 按照自定义的时间编排格式 输出时间
        System.out.println(myFmt.format(now));
        System.out.println(myFmt1.format(now));
        System.out.println(myFmt2.format(now));
        System.out.println(myFmt3.format(now));
        System.out.println(myFmt4.format(now));
        System.out.println(now.toGMTString());
        System.out.println(now.toLocaleString());
        System.out.println(now.toString());
    }
}

//运行结果
2023071210385623/07/12 10:38
2023-07-12 10:38:56
20230712103856秒 星期三 
一年中的第 193 天 一年中第28个星期 一月中第3个星期 在一天中10CST时区
12 Jul 2023 02:38:56 GMT
2023-7-12 10:38:56
Wed Jul 12 10:38:56 CST 2023

四、Calendar 类

打开Java API 文档可以看到java.util.Date 类提供的大部分方法都已经过时了,因为 Date 类在设计之初没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时分秒信息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此JDK 提供了新的时间处理类——Calendar 日历类。

4.1、初始化一个Calendar 对象

class test {
    public static void main(String[] args) {
        //方式1
        Calendar calendar1 = Calendar.getInstance();
        //方式2
        Calendar calendar2 = new GregorianCalendar();
    }
}

4.2、Calendar类中的常用字段

==================================================================================================
字段名						说明
--------------------------------------------------------------------------------------------------
DAY_OF_YEAR 			一年中的第几天
DAY_OF_MONTH 			一个月中的第几天
DAY_OF_WEEK 			一个星期中的第几天

YEAR 					年份
MONTH 					月份
DATE 					日(一个月中的第几天)
HOUR 					12小时制的小时
HOUR_OF_DAY 			24小时制的小时
MINUTE 					分钟
SECONDMILLISECOND 			毫秒

WEEK_OF_YEAR 			当前年中的第几个星期
WEEK_OF_MONTH 			当前月中的第几个星期,日历式的第几周。(例如今天是20237-12,7月的第3周)
DAY_OF_WEEK_IN_MONTH	当前月中的第几个星期,按这个月1号算,1号起就是第1,8号起就是第2周。

===================================================================================================

示例

class test {
    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        System.out.println("当前时间: " + cal.getTime());

        /* 时间的获取 */
        int year = cal.get(Calendar.YEAR);  // 年份
        int month = cal.get(Calendar.MONTH) + 1;  // 月份(月份0代表1月)
        int date = cal.get(Calendar.DATE);  // 日期,年月日中的日,同DAY_OF_MONTH
        int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);  // 第几个星期/年
        int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);  // 第几个星期/月
        int day_of_week_in_month = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);  // 第几个星期/月
        int day_of_year = cal.get(Calendar.DAY_OF_YEAR);  // 第几天/年
        int day_of_month = cal.get(Calendar.DAY_OF_MONTH);  // 第几天/月
        int day_of_week = cal.get(Calendar.DAY_OF_WEEK);  // 第几天/星期
        int hour = cal.get(Calendar.HOUR);  // 小时,12小时制
        int hour_of_day = cal.get(Calendar.HOUR_OF_DAY);  // 小时,24小时制
        int minute = cal.get(Calendar.MINUTE);  // 分钟
        int second = cal.get(Calendar.SECOND);  // 秒
        int millisecond = cal.get(Calendar.MILLISECOND);  // 毫秒

        //输出
        System.out.println("年份,YEAR: " + year);
        System.out.println("月份,MONTH: " + month);
        System.out.println("日期,DATE: " + date);
        System.out.println("第几个星期/年,WEEK_OF_YEAR: " + week_of_year);
        System.out.println("第几个星期/月,WEEK_OF_MONTH: " + week_of_month);
        System.out.println("第几个星期/月,DAY_OF_WEEK_IN_MONTH: " +day_of_week_in_month);
        System.out.println("第几天/年,DAY_OF_YEAR: " + day_of_year);
        System.out.println("第几天/月,DAY_OF_MONTH: " + day_of_month);
        System.out.println("第几天/星期,DAY_OF_WEEK: " + day_of_week);
        System.out.println("小时,12小时制,HOUR: " + hour);
        System.out.println("小时,24小时制,HOUR_OF_DAY: " + hour_of_day);
        System.out.println("分钟,MINUTE: " + minute);
        System.out.println("秒,SECOND: " + second);
        System.out.println("毫秒,MILLISECOND: " + millisecond);
    }
}

//运行结果
当前时间: Wed Jul 12 15:33:06 CST 2023
年份,YEAR: 2023
月份,MONTH: 7
日期,DATE: 12
第几个星期/年,WEEK_OF_YEAR: 28
第几个星期/月,WEEK_OF_MONTH: 3
第几个星期/月,DAY_OF_WEEK_IN_MONTH: 2
第几天/年,DAY_OF_YEAR: 193
第几天/月,DAY_OF_MONTH: 12
第几天/星期,DAY_OF_WEEK: 4
小时,12小时制,HOUR: 3
小时,24小时制,HOUR_OF_DAY: 15
分钟,MINUTE: 33
秒,SECOND: 6
毫秒,MILLISECOND: 20

标题

=======================================================================================================================
		方法										说明
-----------------------------------------------------------------------------------------------------------------------
add(int field. int amount)		根据日历的规则,为给定的日历字段添加或减去指定的时间量
after(Object when)				判断此 Calendar 对象表示的时间是否在指定 Obiect 表示的时间之后,返回判断结果
before(Object when)				判断此 Calendar 对象表示的时间是否在指定 Object 表示的时间之前,返回判断结果
get(int field)					返回给定日历字段的值
getInstance()					使用默认时区和语言环境获得一个日历
getTime()						返回一个表示此 Calendar 对象时间值(从历元至现在的毫秒偏移量)Date 对象
getTimeInMillis()				返回此 Calendar 对象的时间值,以毫秒为单位
roll(int field boolean up)		在给定的时间字段上添加或减去 (/) 单个时间单元,不更改更大的字段
set(int field. int value)		将给定的日历字段设置为给定值
set(int year, int month, int date)											设置日历字段YEARMONTHDAY OF MONTH 的值
set(int year,int month, int date, inthourOfDay, int minute)					设置日历字段 YEARMONTHDAY OF MONTHHOUR OF DAYMINUTE的值
set(int year. int month. int date. inthourOfDay, int minute, int second)	设置字段 YEARMONTHDAY OF MONTHHOURMINUTESECOND的值			
setTime(Date date)															使用给定的 Date 对象设置此 Calendar 对象的时间
setTimeInMillis(long millis)												用给定的 long 值设置此 Calendar 对象的当前时间值
=======================================================================================================================

示例

class test {
    public static void main(String[] args) {
        System.out.println("——————————共和国建立100周年倒计时——————————");
        Date date = new Date(); // 当前时间
        // 创建SimpleDateFormat对象,指定目标格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        // 调用format方法,格式化时间,转换为指定方法
        String today = simpleDateFormat.format(date);
        System.out.println("今天是" + today); // 输出当前日期
        // 获取自1970年1月1日至当前时间所经过的毫秒数
        long time1 = date.getTime();
        // 使用默认时区和语言环境获得一个日历calendar
        Calendar calendar = Calendar.getInstance();
        // 设置日历calendar中的 年、月 和日的值。因为月份是从0开始计算的,所以这里要减一
        calendar.set(2049, 10 - 1, 1);
        // 计算自1970年1月1日至2049年10月1日所经过的毫秒数
        long time2 = calendar.getTimeInMillis();
        // 计算2049年10月1日距离当前时间相差的天数
        long day = (time2 - time1) / (1000 * 60 * 60 * 24);
        System.out.println("距离2049年10月1日还有 " + day + " 天!");
    }
}

//运行结果
——————————共和国建立100周年倒计时——————————
今天是20230712日
距离2049101日还有 9578 天!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值