目录
????????java.util.Date类:表示特定的瞬间,精确到毫秒(千分之一秒),1000毫秒=1秒。毫秒值的作用,可以对时间和日期进行计算,先把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期。
构造方法:
????????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毫秒
要求:获取当前日期,将当前日期转换成毫秒值,并将毫秒值在转换成日期。?
?源代码:
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);
}
}
输出结果:
????????java.text.DateFormat类:是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期(Date对象)和文本(String对象)之间的转换,格式化(也就是日期转换为文本),解析(文本转换为日期)。
?????????DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat的子类(java.text.SimpleDateFormat),常用的方法如下。
String format(Date date):按照指定的模式,把Date日期,格式化为符合模式的字符串。
Date parse(String source):把符合模式的字符串,解析为Date日期。
????????SimpleDateFormat是一个用于格式化和解析日期的类。它提供了一种简单而灵活的方式来将日期转换为特定格式的字符串,或将字符串解析为日期对象。
格式:
????????SimpleDateFormat(String pattern);说明:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
????????参数pattern:传递指定的模式。
????????SimpleDateFormat使用一系列模式字符来定义日期格式,这些模式字符可以代表年、月、日、小时、分钟、秒等各个部分的值。通过在SimpleDateFormat的构造函数中传入指定的日期格式模式,我们可以创建一个可以格式化和解析指定日期格式的SimpleDateFormat对象。
模式 | 说明 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
S | 毫秒 |
模式:区分大小写的,字母不可更改,连接模式的符号可以改变。?
? ? ? ? 使用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);
}
}
输出结果:
?????????使用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);
}
}
输出结果:
????????java.util.Calendar类:日历类,Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_of_MONTH、HOUR),Calendar类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。
public static Calendar getInstance():使用默认时区和语言环境获得一个日历。
//获取日历
Calendar c = Calendar.getInstance();
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();
}
}
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(星期日)
源代码:?
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()=2
c.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()));
}
}
输出结果: