Java027——日期时间类日历类

news/2024/11/29 7:41:51/

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

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) {//方式1Calendar calendar1 = Calendar.getInstance();//方式2Calendar 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_MONTHint 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();// 使用默认时区和语言环境获得一个日历calendarCalendar 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 天!

http://www.ppmy.cn/news/841657.html

相关文章

名画19 董源《画选三幅》

目录 一、《龙宿郊民图》 二、《寒林重汀图》 三、《溪岸图》 五代南唐 董源《龙宿郊民图》,绢本,设色画,轴,156x160cm。台北故宫博物院藏。 画家在这件幅阔,近于正方形的立轴上,采用“平远”的构图&a…

中国山水画蛋糕(测试版)

英文关键词:Super cute antique landscape painting cean cake cut cake, blue crystal ice pattern, he wants to be as charming as mountain paper painting, with a solid color background, complex details, movie lights, fluorescent design, Ilusori engine, pure HD,…

python 执行超时装饰器

代码: import signalclass TimeoutError(Exception):passdef timeout(seconds10, error_messageTimeout):def decorator(func):def wrapper(*args, **kwargs):def _handle_timeout(signum, frame):raise TimeoutError(error_message)signal.signal(signal.SIGALRM, …

【字符串左旋】

题目描述: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 问题解决: 假设字符串为"abcdef",要注意其实为"abcdef\0",我们可以…

LintCode 423. 有效的括号序列 JavaScript算法

描述 给定一个字符串所表示的括号序列,包含以下字符: ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。 括号必须依照 “()” 顺序表示, “()[]{}” 是有效的括号,但 “([)]” 则是无效的括…

leetcode每日一题-423:从英文中重建数字

leetcode每日一题-423:从英文中重建数字 链接 从英文中重建数字 题目 分析 首先我们先分析每个字母的组成,然后发现一些字符只在一个单词中出现,我们先去统计一下这些单词个数。 z,w,u,x,g都只出现在一个数字中,也就是0,2,4,6,8&#xff0…

《Bug 系列》Server returned HTTP response code: 423 for URL

前言 这个异常在网上的资料非常少,说明一般情况下,不会出现这个异常,都由操作系统、网络协议栈封装好了,开发者对此无感知。 现在出现了这个异常,一个非常可能的原因:开发者自己在其中做了某些处理。 异…

423D

题意:给出n个点,其中k个点只能有一条边相连,剩下的边至少有2条边相连,问构造出的树最远的两个点最近是多少 解答:度为1的点的数目越多,这个距离就越小。那么构造一个中心点,发散地连k个点。不够…