新手小白學(xué)JAVA 日期類Date SimpleDateFormat Calendar(入門)
1. Date日期類
類 Date 表示一個特定的瞬間,精確到毫秒
1.1 Date的構(gòu)造函數(shù)
Date() 分配一個 Date 對象,以表示分配它的時間(精確到毫秒)
Date(long date) 分配一個 Date 對象,表示自從標準基準時間起指定時間的毫秒數(shù)
標準基準時間:稱為“歷元(epoch)”,即 1970 年 1 月 1 日 00:00:00
1.2 Date的構(gòu)造函數(shù)練習(xí)
創(chuàng)建包:cn.cxy.date
創(chuàng)建類:TestDate1
package cn.cxy.date;
import java.util.Date;
/*本類用于Date的入門*/
public class TestDate1 {
public static void main(String[] args) {
//1.利用無參構(gòu)造創(chuàng)建Date類對象,注意導(dǎo)包:import java.util.Date;
Date d1= new Date();
System.out.println(d1);//Thu Sep 23 23:14:59 CST 2021
//2.利用含參構(gòu)造創(chuàng)建Date對象
long t = 1000*60*60;//1000ms*60*60->1min*60->1h
Date d2 = new Date(t);//從標準基礎(chǔ)時間1970-1-1-00:00開始往后數(shù)1h
System.out.println(d2);//Thu Jan 01 09:00:00 CST 1970
//CST是中國時區(qū),所以額外加了8h變成了09:00:00
}
}
常用時間縮寫
GMT 格林尼治時間 = UTC 協(xié)調(diào)世界時間
UTC + 時區(qū)差 = 本地時間,我們是在東八區(qū),東加西減,所以
CST 中國標準時間:China Standard Time UT+8:00
1.3 Date的常用方法練習(xí)
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 對象表示的毫秒值
setTime(long time) 設(shè)置時間,表示 1970 年 1 月 1 日 00:00:00 GMT 后的毫秒值
創(chuàng)建包:cn.cxy.date
創(chuàng)建類:TestDate2
package cn.cxy.date;
import java.util.Date;
/*本類用于Date的常用方法測試*/
public class TestDate2 {
public static void main(String[] args) {
//1.創(chuàng)建Date對象
Date d1 = new Date();
//2.獲取從標準基準時間到現(xiàn)在時間的毫秒值,是一個時間差
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設(shè)置一個long值,作為毫秒為單位的時間差
long t = 1000*60*60;
d1.setTime(t);
System.out.println(d1);//打印的就是從標準基準時間經(jīng)過時間差t的時間
}
}
2. SimpleDateFormat
SimpleDateFormat 常用于格式化和解析日期
日期和時間格式由日期和時間模式字符串指定,字母與日期時間的對應(yīng)關(guān)系如下:

2.1 常用構(gòu)造函數(shù)
SimpleDateFormat() 用默認模式的日期格式構(gòu)造 SimpleDateFormat
SimpleDateFormat(String pattern) 用給定模式的日期格式構(gòu)造 SimpleDateFormat
2.2 日期轉(zhuǎn)換格式工具類練習(xí)
創(chuàng)建包:cn.cxy.date
創(chuàng)建類: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.創(chuàng)建日期類對象,包含當前的時間
Date d = new Date();
//2.創(chuàng)建日期轉(zhuǎn)換工具類的對象,此時使用的是無參構(gòu)造
//SimpleDateFormat sdf = new SimpleDateFormat();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
//3.通過剛剛創(chuàng)建好的工具類對象轉(zhuǎn)換日期的格式
String s = sdf2.format(d);
//4.打印轉(zhuǎn)換好的時間字符串:
//默認時間格式: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.利用含參構(gòu)造創(chuàng)建工具類對象,指定格式,注意必須是規(guī)定格式,否則會拋出異常
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
//3.利用工具類對象對日期進行轉(zhuǎn)換
Date d2= sdf3.parse(s2);
//4.打印轉(zhuǎn)換好的日期
System.out.println(d2);//Thu Sep 23 22:24:03 CST 2021
}
}
2.3 日期轉(zhuǎn)換綜合練習(xí)
創(chuàng)建包:cn.cxy.date2
創(chuàng)建工具類:DateUtils.java
package cn.cxy.date2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*本類用作日期類的工具類,一般工具類的要求:
* 構(gòu)造方法私有化 & 成員方法靜態(tài)化*/
public class DateUtils {
//1.創(chuàng)建一個私有化的構(gòu)造方法
private DateUtils(){}
//2.創(chuàng)建一個將日期轉(zhuǎn)換為字符串的方法
//參數(shù):日期對象Date 日期轉(zhuǎn)換的格式:format 返回值類型:String
public static String dateToString(Date date, String format){
//1.通過傳入的日期格式,創(chuàng)建指定的工具類對象
SimpleDateFormat sdf = new SimpleDateFormat(format);
//2.通過工具類對象將字符串轉(zhuǎn)換為對應(yīng)的日期字符串,并拿到轉(zhuǎn)換后的字符串結(jié)果
String s = sdf.format(date);/*轉(zhuǎn)換*/
//3.將最終轉(zhuǎn)換的字符串結(jié)果返回
return s;
}
//3.創(chuàng)建一個將字符串轉(zhuǎn)換為日期的方法
//參數(shù):字符串對象String 日期轉(zhuǎn)換的格式:format 返回值類型:Date
public static Date stringToDate(String s, String format) throws ParseException {
//1.通過傳入的日期格式,創(chuàng)建指定的工具類對象
SimpleDateFormat sdf = new SimpleDateFormat(format);
//2.通過工具類對象將日期對象轉(zhuǎn)換為對應(yīng)的字符串,并拿到轉(zhuǎn)換后的日期對象
Date d = sdf.parse(s);/*解析*/
//3.將最終轉(zhuǎn)換的日期對象作為方法的結(jié)果返回
return d;
}
}
創(chuàng)建包:cn.cxy.date2
創(chuàng)建測試類: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.創(chuàng)建日期類對象
Date d = new Date();
//2.調(diào)用自定義日期工具類的功能:將日期對象轉(zhuǎn)換成字符串
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.調(diào)用自定義工具類的功能,將字符串轉(zhuǎn)換為對應(yīng)的日期對象
//注意,此處的format格式必須與s字符串定義時的格式一致!??!否則轉(zhuǎn)換會報錯!
Date d2 = DateUtils.stringToDate(s, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(d2);//Thu Sep 23 23:01:21 CST 2021
}
}
3.Calendar日歷類
3.1 概念
Calendar 類是一個抽象類,不可直接實例化,但是它有一個直接已知子類GregorianCalendar
它為特定瞬間與還有比如年月日等日歷字段之間的轉(zhuǎn)換和操作提供了一些方法
3.2 常用方法
Calendar提供了一個方法getInstance()用于獲取Calendar對象,它的日歷字段就是當前的日期
int get(int field) 返回給定日歷字段的值
abstract void add(int field, int amount) 根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時間量
void set(int year, int month, int date) 設(shè)置日歷字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
3.3 入門案例
創(chuàng)建包:cn.cxy.date3
創(chuàng)建類:TestCalendar.java
package cn.cxy.date3;
import org.junit.Test;
import java.util.Calendar;
/*本類用于練習(xí)日歷類*/
public class TestCalendar {
@Test
public void TestGet(){
//1.獲取日歷對象
Calendar c = Calendar.getInstance();
System.out.println(c);//能獲取很多信息,比如MONTH=8,我們現(xiàn)在是9月,說明月份是從0開始的
//2.通過獲取到的日歷對象,調(diào)用get(),傳入對應(yīng)的日歷字段,就可以拿到對應(yīng)的值
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.給指定的日歷字段進行指定數(shù)目的加減操作,得到10年后的今天
c.add(Calendar.YEAR,+10);
//3.通過獲取到的日歷對象,調(diào)用get(),傳入對應(yīng)的日歷字段,就可以拿到對應(yīng)的值
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.給指定的日歷字段進行指定數(shù)目的加減操作,得到10年后的今天
c.add(Calendar.YEAR,+1);
c.add(Calendar.DAY_OF_MONTH,+7);
//3.通過獲取到的日歷對象,調(diào)用get(),傳入對應(yīng)的日歷字段,就可以拿到對應(yīng)的值
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.通過獲取到的日歷對象,調(diào)用get(),傳入對應(yīng)的日歷字段,就可以拿到對應(yīng)的值
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 + "日");
}
}
3.4 鞏固案例
創(chuàng)建包:cn.cxy.date3
創(chuàng)建類:TestCalendar.java
需求:用戶任意輸入一個年份,輸出這年的2月有多少天
package cn.cxy.date3;
import java.util.Calendar;
import java.util.Scanner;
/*本類用于日歷類的鞏固練習(xí)
* 需求:獲取任意一年的2月有多少天*/
public class TestFeb {
public static void main(String[] args) {
//1.提示并接收用戶要測試的年份:
System.out.println("請您輸入要查詢的年份:");
int year = new Scanner(System.in).nextInt();
//2.獲取日歷類對象,并將時間設(shè)置為用戶輸入那年的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 + "天");
}
}
到此這篇關(guān)于新手小白學(xué)JAVA 日期類Date SimpleDateFormat Calendar(入門)的文章就介紹到這了,更多相關(guān)JAVA Date SimpleDateFormat Calendar內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實現(xiàn)
在Java程序中字符串默認的編碼方式是UTF-16編碼,因此需要將GBK編碼轉(zhuǎn)換為UTF-8編碼,主要是為了避免出現(xiàn)亂碼的情況,這篇文章主要給大家介紹了關(guān)于Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-11-11
Spring data elasticsearch使用方法詳解
這篇文章主要介紹了Spring data elasticsearch使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比
本文主要介紹了Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比,分享給大家,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
java 中Comparable與Comparator詳解與比較
這篇文章主要介紹了java 中Comparable與Comparator詳解與比較的相關(guān)資料,需要的朋友可以參考下2017-04-04

