目录
日期和时间
1.1 Date类
1.1.1 概述
1.1.2 常用方法
1.1.3 案例
1.2 DateFormat类
1.2.1 概述
1.2.2 常用方法
1.3 SimpleDateFormat类
1.3.1 概述
1.3.2 构造方法
1.3.3 模式字符
1.3.4 日期转字符串
1.3.5 字符串转日期
1.4 Calendar类
1.4.1 概述
1.4.2 静态方法
1.4.3 常用成员方法
1.4.4 成员方法中参数field的常用取值
1.4.5 练习
日期和时间
1.1 Date类
1.1.1 概述
java.util.Date类:表示特定的瞬间,精确到毫秒(千分之一秒),1000毫秒=1秒。毫秒值的作用,可以对时间和日期进行计算,先把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期。
1.1.2 常用方法
构造方法:
Date():获取的就是当前系统的日期和时间。不格式化的情况显示格式是中国标准时间。
Date(Long date):传递毫秒值,把毫秒转换为Date日期。
成员方法:
Long getTime():把日期转换为毫秒值(相当于System.currentTimeMillis()),就是计算当前日期到时间原点之间一共经历了多少毫秒。
注:
1.时间原点(0毫秒):1970年1月1日00:00:00。
2.中国是属于东八区,会把时间增加8个小时,时间原点为:1970年1月1日08:00:00。
3.一天 = 24 * 60 * 60 = 86400秒 = 86400 * 1000 = 86400000毫秒
1.1.3 案例
要求:获取当前日期,将当前日期转换成毫秒值,并将毫秒值在转换成日期。
源代码:
package com.zhy.util;import java.util.Date;public class TestDate {public static void main(String[] args) {Date date = new Date();System.out.println("获取当前日期和时间:" + date);Long missValue = date.getTime();System.out.println("日期 转换成 毫秒值:" + missValue);Date date2 = new Date(missValue);System.out.println("毫秒值 转换成 日期:" + date2);}
}
输出结果:
1.2 DateFormat类
1.2.1 概述
java.text.DateFormat类:是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期(Date对象)和文本(String对象)之间的转换,格式化(也就是日期转换为文本),解析(文本转换为日期)。
1.2.2 常用方法
DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类(java.text.SimpleDateFormat),常用的方法如下。
String format(Date date):按照指定的模式,把Date日期,格式化为符合模式的字符串。
Date parse(String source):把符合模式的字符串,解析为Date日期。
1.3 SimpleDateFormat类
1.3.1 概述
SimpleDateFormat是一个用于格式化和解析日期的类。它提供了一种简单而灵活的方式来将日期转换为特定格式的字符串,或将字符串解析为日期对象。
1.3.2 构造方法
格式:
SimpleDateFormat(String pattern);说明:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数pattern:传递指定的模式。
1.3.3 模式字符
SimpleDateFormat使用一系列模式字符来定义日期格式,这些模式字符可以代表年、月、日、小时、分钟、秒等各个部分的值。通过在SimpleDateFormat的构造函数中传入指定的日期格式模式,我们可以创建一个可以格式化和解析指定日期格式的SimpleDateFormat对象。
模式 | 说明 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
S | 毫秒 |
模式:区分大小写的,字母不可更改,连接模式的符号可以改变。
1.3.4 日期转字符串
使用SimpleDateFormat类的format()成员方法实现。
格式:
String format(Date date):把日期格式化为文本(按照指定的模式,把Date日期,格式化为符合模式的字符串)。
源代码:
package com.zhy.util;import java.text.SimpleDateFormat;
import java.util.Date;public class TestSimpleDateFormat {public static void main(String[] args){//1.创建SimpleDateFormat对象,构造函数中传递指定的模式。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");//2.调用SimpleDateFormat对象中的format方法,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串文本。Date date = new Date();System.out.println("没有格式化的日期:" + date);String dateS = sdf.format(date);System.out.println("使用模式 yyyy-MM-dd HH:mm:ss SSS 格式化日期:" + dateS);String dateS2 = sdf2.format(date);System.out.println("使用模式 yyyy/MM/dd 格式化日期:" + dateS2);}
}
输出结果:
1.3.5 字符串转日期
使用SimpleDateFormat类的parse()成员方法实现。
格式:
Date parse(String source):把文本解析为日期(把符合模式的字符串,解析为Date日期)。
注意事项:
parse方法声明了一个异常,叫做ParseException(解析异常),如果字符串和构造方法中的模式不一样,那么程序就会抛出此异常,也就是编译报错,必须要处理,要么throws继续声明抛出这个异常,要么try…catch自己处理这个异常。
源代码:
package com.zhy.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class TestSimpleDateFormat {public static void main(String[] args) throws ParseException {//1.创建SimpleDateFormat对象,构造函数中传递指定的模式。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");//2.调用SimpleDateFormat对象中的parse方法,把符合构造方法中模式的字符串,解析为Date日期。Date date = sdf.parse("2024-01-08 11:45:08");System.out.println(date);Date date2 = sdf2.parse("2024/01/08");System.out.println(date2);}
}
输出结果:
1.4 Calendar类
1.4.1 概述
java.util.Calendar类:日历类,Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_of_MONTH、HOUR),Calendar类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。
1.4.2 静态方法
public static Calendar getInstance():使用默认时区和语言环境获得一个日历。
//获取日历Calendar c = Calendar.getInstance();
1.4.3 常用成员方法
public Date getTime():返回一个Date对象,表示此日历的时间值,默认当前日期。
public Date setTime(Date date):将此日历的时间设置为给定日期(date)。
package com.zhy.util;import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//第一次获取日历日期,默认当前日期Date now = c.getTime();//设置 当前日历时间 为 当前日期c.setTime(now);}
}
public void add(int field, int amount):根据日历的规则,在给定的日历字段中添加或减去指定的时间量。
package com.zhy.util;import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) {;//日历Calendar c = Calendar.getInstance();//第一次获取日历日期,默认当前日期Date now = c.getTime();//将 日历的当前时间 设置成当前日期c.setTime(now);//1.从日历的当前时间,减去1年c.add(Calendar.YEAR, -1);c.setTime(now);//2.从日历的当前时间,加上2个月c.add(Calendar.MONTH, 2);c.setTime(now);//3.从日历的当前时间,减去10天c.add(Calendar.DAY_OF_MONTH,-10);}
}
public int get(int field):返回给定 日历字段(field) 的值。
public void set(int field,int value):将给定的 日历字段(field) 设置为 给定值(value)。public void set(int year, int month, int date):年月日。
public void set(int year, int month, int date, int hourOfDay, int minute):年月日时分。
public void set(int year, int month, int date, int hourOfDay, int minute,int second):年月日时分秒。
package com.zhy.util;import java.util.Calendar;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//1.设置 日历当前日期 的年份c.set(Calendar.YEAR,2025);//2.设置 日历当前日期 的年月日c.set(2026,Calendar.MAY,19);//3.设置 日历当前日期 的年月日时分c.set(2027,Calendar.MAY,19,12,30);//4.设置 日历当前日期 的年月日时分秒c.set(2028,Calendar.MAY,19,12,30,59);//5.获取 日历当前日期 的年份int year = c.get(Calendar.YEAR);System.out.println(year);//6.获取 日历当前日期 的月份,取值:0-11(1月-12月)int month = c.get(Calendar.MONTH);//month = 4,表示5月份}
}
public int getFirstDayOfWeek():获取一周的第一天,默认值=1(星期日)。
public void setFirstDayOfWeek(int value):设置一周的第一天。
package com.zhy.util;import java.util.Calendar;public class CalendarTest {public static void main(String[] args) {//日历Calendar c = Calendar.getInstance();//1.获取一周的第一天,默认 值 = 1(星期日)int firstDay= c.getFirstDayOfWeek();//2.设置一周的第一天为周一c.setFirstDayOfWeek(Calendar.MONDAY);//3.再次获取,此时 值 = 2(星期一)firstDay= c.getFirstDayOfWeek();}
}
1.4.4 成员方法中参数field的常用取值
Calendar.ERA:纪元,取值:只能为0(代表公元前)或1(代表公元)
Calendar.YEAR:年
Calendar.MONTH:月
Calendar.DATE:一个月中的第几天,等同于Calendar.DAY_OF_MONTH
Calendar.HOUR:12小时制下的小时数,中午和午夜表示为0
Calendar.HOUR_OF_DAY:24小时制下的小时数,午夜表示为0
Calendar.MINUTE:分
Calendar.SECOND:秒
Calendar.MILLISECOND:毫秒
Calendar.AM_PM=0:时间是在中午之前还是之后,取值0(中午前)和1(中午后)
Calendar.DAY_OF_MONTH:一年中的第几天(判断当前日期是几月份),取值0-11(1月份-12月份)
一月:Calendar.JANUARY = 0
二月:Calendar.FEBRUARY = 1
三月:Calendar.MARCH = 2
四月:Calendar.APRIL = 3
五月:Calendar.MAY = 4
六月:Calendar.JUNE = 5
七月:Calendar.JULY = 6
八月:Calendar.AUGUST = 7
九月:Calendar.SEPTEMBER = 8
十月:Calendar.OCTOBER = 9
十一月:Calendar.NOVEMBER = 10
十二月:Calendar.DECEMBER = 11
Calendar.DAY_OF_MONTH:一个月中的第几天(判断当前日期是几号)
Calendar.DAY_OF_WEEK_IN_MONTH:这一天所对应的星期几在该月中是第几次出现(判断当前日期是这个月的第几个星期几)
Calendar.DAY_OF_WEEK:一周中的第几天(判断当前日期是周几),取值1-7(周日-周六)
星期日:Calendar.SUNDAY=1
星期一:Calendar.MONDAY=2
星期二:Calendar.TUESDAY=3
星期三:Calendar.WEDNESDAY=4
星期四:Calendar.THURSDAY=5
星期五:Calendar.FRIDAY=6
星期六:Calendar.SATURDAY=7
Calendar.WEEK_OF_YEAR:一年中的第几个星期
Calendar.WEEK_OF_MONTH:一个月中的第几个星期
Calendar.firstDayOfWeek:一周中的第一天,默认1(星期日)
1.4.5 练习
源代码:
package com.zhy.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class CalendarTest {public static void main(String[] args) throws ParseException {//日期格式化SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//获取日历Calendar c = Calendar.getInstance();//一、获取当前日期Date now = c.getTime();System.out.println("当前日期:" + sdf.format(c.getTime()));System.out.println("=============================================");//二、获取本周周五的日期//1.设置 日历当前时间 为当前日期c.setTime(now);//2.设置当当前日历每周的第一天为周一,则:c.getFirstDayOfWeek()=2c.setFirstDayOfWeek(Calendar.MONDAY);//3.在 当前日期 的基础上,根据公式推算 当前日期 距离周五 的天数,进行日期偏移。// c.get(Calendar.DAY_OF_WEEK):由于周日=1,为了符合数字和星期对应,每一天都要-1;// 例如:周一的c.get(Calendar.DAY_OF_WEEK)=2,减一之后c.get(Calendar.DAY_OF_WEEK)=1,后面以此类推c.add(Calendar.DATE, (c.getFirstDayOfWeek() - (c.get(Calendar.DAY_OF_WEEK) - 1) + 3));//4.格式化日期System.out.println("本周周五是:" + sdf.format(c.getTime()));System.out.println("=============================================");//三、获取一年三月个后的倒数第五天的日期//1.设置日历为当前日期c.setTime(now);//2.在当前日期的基础上加上1年4个月c.add(Calendar.YEAR,1);c.add(Calendar.MONTH,4);//3.往前倒数5天,0:倒数一天,-4:倒数5天c.set(Calendar.DAY_OF_MONTH,-4);//4.格式化日期System.out.println("一年三个月后的倒数第五天是:" + sdf.format(c.getTime()));}
}
输出结果: