时间类
第一章 Date类
1.1 Date概述
1.2 Date常用方法
第二章 SimpleDateFormat类
2.1 构造方法
2.2 格式规则
2.3 常用方法
2.4 练习1(初恋女友的出生日期)
2.5 练习2(秒杀活动)
第三章 Calendar类
3.1 概述
3.2 常用方法
3.3 get方法示例
3.4 set方法示例:
3.5 add方法示例:
第一章 Date类
1.1 Date概述
java.util.Date`类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数
public Date():从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date):将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:
import java.util.Date; public class Demo01Date { public static void main(String[] args) { // 创建日期对象,把当前的时间 System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020 // 创建日期对象,把当前的毫秒值转成日期对象 System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970 } }
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
1.2 Date常用方法
Date类中的多数方法已经过时,常用的方法有:
public long getTime() 把日期对象转换成对应的时间毫秒值。
public void setTime(long time) 把方法参数给定的毫秒值设置给日期对象
示例代码
public class DateDemo02 { public static void main(String[] args) { //创建日期对象 Date d = new Date(); //public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 //System.out.println(d.getTime()); //System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年"); //public void setTime(long time):设置时间,给的是毫秒值 //long time = 1000*60*60; long time = System.currentTimeMillis(); d.setTime(time); System.out.println(d); } }
小结:Date表示特定的时间瞬间,我们可以使用Date对象对时间进行操作。
第二章 SimpleDateFormat类
java.text.SimpleDateFormat 是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,把Date对象转换为String对象。
解析:按照指定的格式,把String对象转换为Date对象。
2.1 构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。
2.2 格式规则
常用的格式规则为:
标识字母(区分大小写) |
含义 |
y |
年 |
M |
月 |
d |
日 |
H |
时 |
m |
分 |
s |
秒 |
备注:更详细的格式规则,可以参考SimpleDateFormat类的API文档。
2.3 常用方法
DateFormat类的常用方法有:
public String format(Date date):将Date对象格式化为字符串。
public Date parse(String source):将字符串解析为Date对象。
package com.itheima.a01jdk7datedemo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class A03_SimpleDateFormatDemo1 { public static void main(String[] args) throws ParseException { /* public simpleDateFormat() 默认格式 public simpleDateFormat(String pattern) 指定格式 public final string format(Date date) 格式化(日期对象 ->字符串) public Date parse(string source) 解析(字符串 ->日期对象) */ //1.定义一个字符串表示时间 String str = "2023-11-11 11:11:11"; //2.利用空参构造创建simpleDateFormat对象 // 细节: //创建对象的格式要跟字符串的格式完全一致 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(str); //3.打印结果 System.out.println(date.getTime());//1699672271000 } private static void method1() { //1.利用空参构造创建simpleDateFormat对象,默认格式 SimpleDateFormat sdf1 = new SimpleDateFormat(); Date d1 = new Date(0L); String str1 = sdf1.format(d1); System.out.println(str1);//1970/1/1 上午8:00 //2.利用带参构造创建simpleDateFormat对象,指定格式 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); String str2 = sdf2.format(d1); System.out.println(str2);//1970年01月01日 08:00:00 //课堂练习:yyyy年MM月dd日 时:分:秒 星期 } }
小结:DateFormat可以将Date对象和字符串相互转换。
2.4 练习1(初恋女友的出生日期)
/* 假设,你初恋的出生年月日为:2000-11-11 请用字符串表示这个数据,并将其转换为:2000年11月11日 创建一个Date对象表示2000年11月11日 创建一个SimpleDateFormat对象,并定义格式为年月日把时间变成:2000年11月11日 */ //1.可以通过2000-11-11进行解析,解析成一个Date对象 String str = "2000-11-11"; //2.解析 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf1.parse(str); //3.格式化 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); String result = sdf2.format(date); System.out.println(result);
2.5 练习2(秒杀活动)
/* 需求: 秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值) 秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值) 小贾下单并付款的时间为:2023年11月11日 0:01:0 小皮下单并付款的时间为:2023年11月11日 0:11:0 用代码说明这两位同学有没有参加上秒杀活动? */ //1.定义字符串表示三个时间 String startstr = "2023年11月11日 0:0:0"; String endstr = "2023年11月11日 0:10:0"; String orderstr = "2023年11月11日 0:01:00"; //2.解析上面的三个时间,得到Date对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); Date startDate = sdf.parse(startstr); Date endDate = sdf.parse(endstr); Date orderDate = sdf.parse(orderstr); //3.得到三个时间的毫秒值 long startTime = startDate.getTime(); long endTime = endDate.getTime(); long orderTime = orderDate.getTime(); //4.判断 if (orderTime >= startTime && orderTime <= endTime) { System.out.println("参加秒杀活动成功"); } else { System.out.println("参加秒杀活动失败"); }
第三章 Calendar类
3.1 概述
java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。
有两种方式可以获取GregorianCalendar对象:
直接创建GregorianCalendar对象;
通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象【本次课使用】
3.2 常用方法
方法名 |
说明 |
public static Calendar getlnstance() |
获取一个它的子类GregorianCalendar对象 |
public int get (int field) |
获取某个字段的值。field参数表示获取哪个字段的值, 可以使用Calender中定义的常量来表示: Calendar.YEAR:年 Calendar.MONTH:月 Calendar.DAY-OF-MONTH:月中的日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY-OF-WEEK:星期 |
public void set (int field,int value) |
获取某个字段的值 |
public void add(int field,int amount |
为某个字段增加/减少指定的值 |
3.3 get方法示例
public class Demo { public static void main(String[] args) { //1.获取一个GregorianCalendar对象 Calendar instance = Calendar.getInstance();//获取子类对象 //2.打印子类对象 System.out.println(instance); //3.获取属性 int year = instance.get(Calendar.YEAR); int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11 int day = instance.get(Calendar.DAY_OF_MONTH); int hour = instance.get(Calendar.HOUR); int minute = instance.get(Calendar.MINUTE); int second = instance.get(Calendar.SECOND); int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六" System.out.println(year + "年" + month + "月" + day + "日" + hour + ":" + minute + ":" + second); System.out.println(getWeek(week)); } //查表法,查询星期几 public static String getWeek(int w) {//w = 1 --- 7 //做一个表(数组) String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; // 索引 [0] [1] [2] [3] [4] [5] [6] //查表 return weekArray[w - 1]; } }
3.4 set方法示例:
public class Demo { public static void main(String[] args) { //设置属性——set(int field,int value): Calendar c1 = Calendar.getInstance();//获取当前日期 //计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日) c1.set(Calendar.YEAR, 1998); c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值 c1.set(Calendar.DAY_OF_MONTH, 18); int w = c1.get(Calendar.DAY_OF_WEEK); System.out.println("班长出生那天是:" + getWeek(w)); } //查表法,查询星期几 public static String getWeek(int w) {//w = 1 --- 7 //做一个表(数组) String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; // 索引 [0] [1] [2] [3] [4] [5] [6] //查表 return weekArray[w - 1]; } }
3.5 add方法示例:
public class Demo { public static void main(String[] args) { //计算200天以后是哪年哪月哪日,星期几? Calendar c2 = Calendar.getInstance();//获取当前日期 c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200 int y = c2.get(Calendar.YEAR); int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份 int d = c2.get(Calendar.DAY_OF_MONTH); int wk = c2.get(Calendar.DAY_OF_WEEK); System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk)); } //查表法,查询星期几 public static String getWeek(int w) {//w = 1 --- 7 //做一个表(数组) String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; // 索引 [0] [1] [2] [3] [4] [5] [6] //查表 return weekArray[w - 1]; } }
后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹