第一章 Date類
1.1 Date概述
java.util.Date`類 表示特定的瞬間,精確到毫秒。
繼續(xù)查閱Date類的描述,發(fā)現(xiàn)Date擁有多個(gè)構(gòu)造函數(shù),只是部分已經(jīng)過(guò)時(shí),我們重點(diǎn)看以下兩個(gè)構(gòu)造函數(shù)
-
public Date()
:從運(yùn)行程序的此時(shí)此刻到時(shí)間原點(diǎn)經(jīng)歷的毫秒值,轉(zhuǎn)換成Date對(duì)象,分配Date對(duì)象并初始化此對(duì)象,以表示分配它的時(shí)間(精確到毫秒)。 -
public Date(long date)
:將指定參數(shù)的毫秒值date,轉(zhuǎn)換成Date對(duì)象,分配Date對(duì)象并初始化此對(duì)象,以表示自從標(biāo)準(zhǔn)基準(zhǔn)時(shí)間(稱為“歷元(epoch)”,即1970年1月1日00:00:00 GMT)以來(lái)的指定毫秒數(shù)。
tips: 由于中國(guó)處于東八區(qū)(GMT+08:00)是比世界協(xié)調(diào)時(shí)間/格林尼治時(shí)間(GMT)快8小時(shí)的時(shí)區(qū),當(dāng)格林尼治標(biāo)準(zhǔn)時(shí)間為0:00時(shí),東八區(qū)的標(biāo)準(zhǔn)時(shí)間為08:00。
簡(jiǎn)單來(lái)說(shuō):使用無(wú)參構(gòu)造,可以自動(dòng)設(shè)置當(dāng)前系統(tǒng)時(shí)間的毫秒時(shí)刻;指定long類型的構(gòu)造參數(shù),可以自定義毫秒時(shí)刻。例如:
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
// 創(chuàng)建日期對(duì)象,把當(dāng)前的時(shí)間
System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
// 創(chuàng)建日期對(duì)象,把當(dāng)前的毫秒值轉(zhuǎn)成日期對(duì)象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
}
}
tips:在使用println方法時(shí),會(huì)自動(dòng)調(diào)用Date類中的toString方法。Date類對(duì)Object類中的toString方法進(jìn)行了覆蓋重寫(xiě),所以結(jié)果為指定格式的字符串。
1.2 Date常用方法
Date類中的多數(shù)方法已經(jīng)過(guò)時(shí),常用的方法有:
-
public long getTime()
把日期對(duì)象轉(zhuǎn)換成對(duì)應(yīng)的時(shí)間毫秒值。 -
public void setTime(long time)
把方法參數(shù)給定的毫秒值設(shè)置給日期對(duì)象
示例代碼
public class DateDemo02 {
public static void main(String[] args) {
//創(chuàng)建日期對(duì)象
Date d = new Date();
//public long getTime():獲取的是日期對(duì)象從1970年1月1日 00:00:00到現(xiàn)在的毫秒值
//System.out.println(d.getTime());
//System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//public void setTime(long time):設(shè)置時(shí)間,給的是毫秒值
//long time = 1000*60*60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
}
小結(jié):Date表示特定的時(shí)間瞬間,我們可以使用Date對(duì)象對(duì)時(shí)間進(jìn)行操作。
第二章 SimpleDateFormat類
java.text.SimpleDateFormat
是日期/時(shí)間格式化類,我們通過(guò)這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn)換,也就是可以在Date對(duì)象與String對(duì)象之間進(jìn)行來(lái)回轉(zhuǎn)換。
- 格式化:按照指定的格式,把Date對(duì)象轉(zhuǎn)換為String對(duì)象。
- 解析:按照指定的格式,把String對(duì)象轉(zhuǎn)換為Date對(duì)象。
2.1 構(gòu)造方法
由于DateFormat為抽象類,不能直接使用,所以需要常用的子類java.text.SimpleDateFormat
。這個(gè)類需要一個(gè)模式(格式)來(lái)指定格式化或解析的標(biāo)準(zhǔn)。構(gòu)造方法為:
-
public SimpleDateFormat(String pattern)
:用給定的模式和默認(rèn)語(yǔ)言環(huán)境的日期格式符號(hào)構(gòu)造SimpleDateFormat。參數(shù)pattern是一個(gè)字符串,代表日期時(shí)間的自定義格式。
2.2 格式規(guī)則
常用的格式規(guī)則為:
標(biāo)識(shí)字母(區(qū)分大小寫(xiě)) | 含義 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 時(shí) |
m | 分 |
s | 秒 |
備注:更詳細(xì)的格式規(guī)則,可以參考SimpleDateFormat類的API文檔。
2.3 常用方法
DateFormat類的常用方法有:
-
public String format(Date date)
:將Date對(duì)象格式化為字符串。 -
public Date parse(String source)
:將字符串解析為Date對(duì)象。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() 默認(rèn)格式 public simpleDateFormat(String pattern) 指定格式 public final string format(Date date) 格式化(日期對(duì)象 ->字符串) public Date parse(string source) 解析(字符串 ->日期對(duì)象) */ //1.定義一個(gè)字符串表示時(shí)間 String str = "2023-11-11 11:11:11"; //2.利用空參構(gòu)造創(chuàng)建simpleDateFormat對(duì)象 // 細(xì)節(jié): //創(chuàng)建對(duì)象的格式要跟字符串的格式完全一致 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(str); //3.打印結(jié)果 System.out.println(date.getTime());//1699672271000 } private static void method1() { //1.利用空參構(gòu)造創(chuàng)建simpleDateFormat對(duì)象,默認(rèn)格式 SimpleDateFormat sdf1 = new SimpleDateFormat(); Date d1 = new Date(0L); String str1 = sdf1.format(d1); System.out.println(str1);//1970/1/1 上午8:00 //2.利用帶參構(gòu)造創(chuàng)建simpleDateFormat對(duì)象,指定格式 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 //課堂練習(xí):yyyy年MM月dd日 時(shí):分:秒 星期 } }
小結(jié):DateFormat可以將Date對(duì)象和字符串相互轉(zhuǎn)換。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-672927.html
2.4 練習(xí)1(初戀女友的出生日期)
/*
假設(shè),你初戀的出生年月日為:2000-11-11
請(qǐng)用字符串表示這個(gè)數(shù)據(jù),并將其轉(zhuǎn)換為:2000年11月11日
創(chuàng)建一個(gè)Date對(duì)象表示2000年11月11日
創(chuàng)建一個(gè)SimpleDateFormat對(duì)象,并定義格式為年月日把時(shí)間變成:2000年11月11日
*/
//1.可以通過(guò)2000-11-11進(jìn)行解析,解析成一個(gè)Date對(duì)象
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 練習(xí)2(秒殺活動(dòng))
/* 需求:
秒殺活動(dòng)開(kāi)始時(shí)間:2023年11月11日 0:0:0(毫秒值)
秒殺活動(dòng)結(jié)束時(shí)間:2023年11月11日 0:10:0(毫秒值)
小賈下單并付款的時(shí)間為:2023年11月11日 0:01:0
小皮下單并付款的時(shí)間為:2023年11月11日 0:11:0
用代碼說(shuō)明這兩位同學(xué)有沒(méi)有參加上秒殺活動(dòng)?
*/
//1.定義字符串表示三個(gè)時(shí)間
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.解析上面的三個(gè)時(shí)間,得到Date對(duì)象
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.得到三個(gè)時(shí)間的毫秒值
long startTime = startDate.getTime();
long endTime = endDate.getTime();
long orderTime = orderDate.getTime();
//4.判斷
if (orderTime >= startTime && orderTime <= endTime) {
System.out.println("參加秒殺活動(dòng)成功");
} else {
System.out.println("參加秒殺活動(dòng)失敗");
}
第三章 Calendar類
3.1 概述
- java.util.Calendar類表示一個(gè)“日歷類”,可以進(jìn)行日期運(yùn)算。它是一個(gè)抽象類,不能創(chuàng)建對(duì)象,我們可以使用它的子類:java.util.GregorianCalendar類。
- 有兩種方式可以獲取GregorianCalendar對(duì)象:
- 直接創(chuàng)建GregorianCalendar對(duì)象;
- 通過(guò)Calendar的靜態(tài)方法getInstance()方法獲取GregorianCalendar對(duì)象【本次課使用】
3.2 常用方法
方法名 | 說(shuō)明 |
---|---|
public static Calendar getInstance() | 獲取一個(gè)它的子類GregorianCalendar對(duì)象。 |
public int get(int field) | 獲取某個(gè)字段的值。field參數(shù)表示獲取哪個(gè)字段的值, 可以使用Calender中定義的常量來(lái)表示: Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:月中的日期 Calendar.HOUR:小時(shí) Calendar.MINUTE:分鐘 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期 |
public void set(int field,int value) | 設(shè)置某個(gè)字段的值 |
public void add(int field,int amount) | 為某個(gè)字段增加/減少指定的值 |
3.3 get方法示例
public class Demo {
public static void main(String[] args) {
//1.獲取一個(gè)GregorianCalendar對(duì)象
Calendar instance = Calendar.getInstance();//獲取子類對(duì)象
//2.打印子類對(duì)象
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
//做一個(gè)表(數(shù)組)
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) {
//設(shè)置屬性——set(int field,int value):
Calendar c1 = Calendar.getInstance();//獲取當(dāng)前日期
//計(jì)算班長(zhǎng)出生那天是星期幾(假如班長(zhǎng)出生日期為:1998年3月18日)
c1.set(Calendar.YEAR, 1998);
c1.set(Calendar.MONTH, 3 - 1);//轉(zhuǎn)換為Calendar內(nèi)部的月份值
c1.set(Calendar.DAY_OF_MONTH, 18);
int w = c1.get(Calendar.DAY_OF_WEEK);
System.out.println("班長(zhǎng)出生那天是:" + getWeek(w));
}
//查表法,查詢星期幾
public static String getWeek(int w) {//w = 1 --- 7
//做一個(gè)表(數(shù)組)
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) {
//計(jì)算200天以后是哪年哪月哪日,星期幾?
Calendar c2 = Calendar.getInstance();//獲取當(dāng)前日期
c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200
int y = c2.get(Calendar.YEAR);
int m = c2.get(Calendar.MONTH) + 1;//轉(zhuǎn)換為實(shí)際的月份
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
//做一個(gè)表(數(shù)組)
String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
// 索引 [0] [1] [2] [3] [4] [5] [6]
//查表
return weekArray[w - 1];
}
}
后記
????????美好的一天,到此結(jié)束,下次繼續(xù)努力!欲知后續(xù),請(qǐng)看下回分解,寫(xiě)作不易,感謝大家的支持??! ??????文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-672927.html
到了這里,關(guān)于從零開(kāi)始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門(mén)指南之時(shí)間類(十七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!