您好,登錄后才能下訂單哦!
本篇內容介紹了“如何理解JAVA日期類Date SimpleDateFormat Calendar”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1. Date日期類
1.1 Date的構造函數
1.2 Date的構造函數練習
1.3 Date的常用方法練習
2. SimpleDateFormat
2.1 常用構造函數
2.2 日期轉換格式工具類練習
2.3 日期轉換綜合練習
3.Calendar日歷類
3.1 概念
3.2 常用方法
3.3 入門案例
3.4 鞏固案例
類 Date 表示一個特定的瞬間,精確到毫秒
Date() 分配一個 Date 對象,以表示分配它的時間(精確到毫秒)
Date(long date) 分配一個 Date 對象,表示自從標準基準時間起指定時間的毫秒數
標準基準時間:稱為“歷元(epoch)”,即 1970 年 1 月 1 日 00:00:00
創建包:cn.cxy.date
創建類:TestDate1
package cn.cxy.date; import java.util.Date; /*本類用于Date的入門*/ public class TestDate1 { public static void main(String[] args) { //1.利用無參構造創建Date類對象,注意導包:import java.util.Date; Date d1= new Date(); System.out.println(d1);//Thu Sep 23 23:14:59 CST 2021 //2.利用含參構造創建Date對象 long t = 1000*60*60;//1000ms*60*60->1min*60->1h Date d2 = new Date(t);//從標準基礎時間1970-1-1-00:00開始往后數1h System.out.println(d2);//Thu Jan 01 09:00:00 CST 1970 //CST是中國時區,所以額外加了8h變成了09:00:00 } }
常用時間縮寫
GMT 格林尼治時間 = UTC 協調世界時間
UTC + 時區差 = 本地時間,我們是在東八區,東加西減,所以
CST 中國標準時間:China Standard Time UT+8:00
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 對象表示的毫秒值
setTime(long time) 設置時間,表示 1970 年 1 月 1 日 00:00:00 GMT 后的毫秒值
創建包:cn.cxy.date
創建類:TestDate2
package cn.cxy.date; import java.util.Date; /*本類用于Date的常用方法測試*/ public class TestDate2 { public static void main(String[] args) { //1.創建Date對象 Date d1 = new Date(); //2.獲取從標準基準時間到現在時間的毫秒值,是一個時間差 System.out.println(d1.getTime());//1632404114206 //*1.0是為了變成浮點型,/1000變成秒,/60變成分,/60變成小時,/24變成天,/365變成年 System.out.println(d1.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365);//約等于51,從1970到2021 //3.打印d1就是當前的時間 System.out.println(d1);//Thu Sep 23 21:39:29 CST 2021 //4設置一個long值,作為毫秒為單位的時間差 long t = 1000*60*60; d1.setTime(t); System.out.println(d1);//打印的就是從標準基準時間經過時間差t的時間 } }
SimpleDateFormat 常用于格式化和解析日期
日期和時間格式由日期和時間模式字符串指定,字母與日期時間的對應關系如下:
SimpleDateFormat() 用默認模式的日期格式構造 SimpleDateFormat
SimpleDateFormat(String pattern) 用給定模式的日期格式構造 SimpleDateFormat
創建包:cn.cxy.date
創建類:TestSDF.java
package cn.cxy.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /*本類用于測試SimpleDateFormat類*/ public class TestSDF { public static void main(String[] args) throws ParseException { /*01 格式化:從 Date 到 String*/ //1.創建日期類對象,包含當前的時間 Date d = new Date(); //2.創建日期轉換工具類的對象,此時使用的是無參構造 //SimpleDateFormat sdf = new SimpleDateFormat(); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //3.通過剛剛創建好的工具類對象轉換日期的格式 String s = sdf2.format(d); //4.打印轉換好的時間字符串: //默認時間格式:21-9-23 下午11:18 //自定義時間格式:2021/09/23 10:21:39 System.out.println(s); /*解析:從String到 Date*/ //1.定義一個時間字符串 String s2 = "2021/9/23 22:24:03"; //報錯:ParseException解析異常: Unparseable date不可分割日期: "2021/9/23 22:24:03" //SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss"); //2.利用含參構造創建工具類對象,指定格式,注意必須是規定格式,否則會拋出異常 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //3.利用工具類對象對日期進行轉換 Date d2= sdf3.parse(s2); //4.打印轉換好的日期 System.out.println(d2);//Thu Sep 23 22:24:03 CST 2021 } }
創建包:cn.cxy.date2
創建工具類:DateUtils.java
package cn.cxy.date2; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /*本類用作日期類的工具類,一般工具類的要求: * 構造方法私有化 & 成員方法靜態化*/ public class DateUtils { //1.創建一個私有化的構造方法 private DateUtils(){} //2.創建一個將日期轉換為字符串的方法 //參數:日期對象Date 日期轉換的格式:format 返回值類型:String public static String dateToString(Date date, String format){ //1.通過傳入的日期格式,創建指定的工具類對象 SimpleDateFormat sdf = new SimpleDateFormat(format); //2.通過工具類對象將字符串轉換為對應的日期字符串,并拿到轉換后的字符串結果 String s = sdf.format(date);/*轉換*/ //3.將最終轉換的字符串結果返回 return s; } //3.創建一個將字符串轉換為日期的方法 //參數:字符串對象String 日期轉換的格式:format 返回值類型:Date public static Date stringToDate(String s, String format) throws ParseException { //1.通過傳入的日期格式,創建指定的工具類對象 SimpleDateFormat sdf = new SimpleDateFormat(format); //2.通過工具類對象將日期對象轉換為對應的字符串,并拿到轉換后的日期對象 Date d = sdf.parse(s);/*解析*/ //3.將最終轉換的日期對象作為方法的結果返回 return d; } }
創建包:cn.cxy.date2
創建測試類:TestDate.java
package cn.cxy.date2; import java.text.ParseException; import java.util.Date; /*本類用于自定義日期工具類的測試類*/ public class TestDate { public static void main(String[] args) throws ParseException { //1.創建日期類對象 Date d = new Date(); //2.調用自定義日期工具類的功能:將日期對象轉換成字符串 String s = DateUtils.dateToString(d, "yyyy年MM月dd日 HH:mm:ss"); String s2 = DateUtils.dateToString(d, "yyyy年MM月dd日"); String s3 = DateUtils.dateToString(d, "HH:mm:ss"); System.out.println(s);//2021年09月23日 10:55:32 System.out.println(s2);//2021年09月23日 System.out.println(s3);//10:58:21 //3.調用自定義工具類的功能,將字符串轉換為對應的日期對象 //注意,此處的format格式必須與s字符串定義時的格式一致!!!否則轉換會報錯! Date d2 = DateUtils.stringToDate(s, "yyyy年MM月dd日 HH:mm:ss"); System.out.println(d2);//Thu Sep 23 23:01:21 CST 2021 } }
Calendar 類是一個抽象類,不可直接實例化,但是它有一個直接已知子類GregorianCalendar
它為特定瞬間與還有比如年月日等日歷字段之間的轉換和操作提供了一些方法
Calendar提供了一個方法getInstance()用于獲取Calendar對象,它的日歷字段就是當前的日期
int get(int field) 返回給定日歷字段的值
abstract void add(int field, int amount) 根據日歷的規則,為給定的日歷字段添加或減去指定的時間量
void set(int year, int month, int date) 設置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
創建包:cn.cxy.date3
創建類:TestCalendar.java
package cn.cxy.date3; import org.junit.Test; import java.util.Calendar; /*本類用于練習日歷類*/ public class TestCalendar { @Test public void TestGet(){ //1.獲取日歷對象 Calendar c = Calendar.getInstance(); System.out.println(c);//能獲取很多信息,比如MONTH=8,我們現在是9月,說明月份是從0開始的 //2.通過獲取到的日歷對象,調用get(),傳入對應的日歷字段,就可以拿到對應的值 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int day = c.get(Calendar.DAY_OF_MONTH); System.out.println(year + "年" + month + "月" + day + "日");//2021年9月24日 } @Test public void TestAdd1(){ //1.獲取日歷對象 Calendar c = Calendar.getInstance(); //2.給指定的日歷字段進行指定數目的加減操作,得到10年后的今天 c.add(Calendar.YEAR,+10); //3.通過獲取到的日歷對象,調用get(),傳入對應的日歷字段,就可以拿到對應的值 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int day = c.get(Calendar.DAY_OF_MONTH); //4.打印的就是10年后的今天:2031年9月24日 System.out.println(year + "年" + month + "月" + day + "日"); } @Test public void TestAdd2(){//需求:打印1年后的7天后 //1.獲取日歷對象 Calendar c = Calendar.getInstance(); //2.給指定的日歷字段進行指定數目的加減操作,得到10年后的今天 c.add(Calendar.YEAR,+1); c.add(Calendar.DAY_OF_MONTH,+7); //3.通過獲取到的日歷對象,調用get(),傳入對應的日歷字段,就可以拿到對應的值 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int day = c.get(Calendar.DAY_OF_MONTH); //4.打印1年后的7天后:2022年10月1日 System.out.println(year + "年" + month + "月" + day + "日"); } @Test public void TestSet(){ //1.獲取日歷對象 Calendar c = Calendar.getInstance(); //2.測試set方法 c.set(2099,9,1); //3.通過獲取到的日歷對象,調用get(),傳入對應的日歷字段,就可以拿到對應的值 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH)+1; int day = c.get(Calendar.DAY_OF_MONTH); //4.打印:2099年10月1日 System.out.println(year + "年" + month + "月" + day + "日"); } }
創建包:cn.cxy.date3
創建類:TestCalendar.java
需求:用戶任意輸入一個年份,輸出這年的2月有多少天
package cn.cxy.date3; import java.util.Calendar; import java.util.Scanner; /*本類用于日歷類的鞏固練習 * 需求:獲取任意一年的2月有多少天*/ public class TestFeb { public static void main(String[] args) { //1.提示并接收用戶要測試的年份: System.out.println("請您輸入要查詢的年份:"); int year = new Scanner(System.in).nextInt(); //2.獲取日歷類對象,并將時間設置為用戶輸入那年的3月1日 Calendar c = Calendar.getInstance(); c.set(year, 2, 1); //3.三月一日往前推一天就是2月的最后一天 c.add(Calendar.DATE, -1); //4.獲取這一天輸出即可 int date = c.get(Calendar.DATE); System.out.println(year + "年的2月有" + date + "天"); } }
“如何理解JAVA日期類Date SimpleDateFormat Calendar”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。