Java語言基礎(chǔ)學(xué)習(xí)有關(guān)日期時間的API

一魄梯、?JDK8之前日期時間API

1. java.lang.System類

System類提供的public static long currentTimeMillis()用來返回當(dāng)前時 間與1970年1月1日0時0分0秒之間以毫秒為單位的時間差酌予。 此方法適于計(jì)算時間差,稱為時間戳洋措。

@Test

? ? public void test1(){

? ? ? ? long time = System.currentTimeMillis();

? ? ? ? //返回當(dāng)前時間與1970年1月1日0時0分0秒之間以毫秒為單位的時間差谋梭。

? ? ? ? //稱為時間戳

? ? ? ? System.out.println(time);

? ? }

2. java.util.Date類 和子類java.sql.Date

java.util.Date類

? ? ? |---java.sql.Date類

1.兩個構(gòu)造器的使用

? ? >構(gòu)造器一:Date():創(chuàng)建一個對應(yīng)當(dāng)前時間的Date對象

? ? >構(gòu)造器二:創(chuàng)建指定毫秒數(shù)的Date對象

2.兩個方法的使用

? ? >toString():顯示當(dāng)前的年圾亏、月、日昭雌、時、分健田、秒

? ? >getTime():獲取當(dāng)前Date對象對應(yīng)的毫秒數(shù)烛卧。(時間戳)

3. java.sql.Date對應(yīng)著數(shù)據(jù)庫中的日期類型的變量

? ? >如何實(shí)例化

? ? >如何將java.util.Date對象轉(zhuǎn)換為java.sql.Date對象

@Test

? ? public void test2(){

? ? ? ? //構(gòu)造器一:Date():創(chuàng)建一個對應(yīng)當(dāng)前時間的Date對象

? ? ? ? Date date1 = new Date();

? ? ? ? System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019

? ? ? ? System.out.println(date1.getTime());//1550306204104

? ? ? ? //構(gòu)造器二:創(chuàng)建指定毫秒數(shù)的Date對象

? ? ? ? Date date2 = new Date(155030620410L);

? ? ? ? System.out.println(date2.toString());

? ? ? ? //創(chuàng)建java.sql.Date對象

? ? ? ? java.sql.Date date3 = new java.sql.Date(35235325345L);

? ? ? ? System.out.println(date3);//1971-02-13

? ? ? ? //如何將java.util.Date對象轉(zhuǎn)換為java.sql.Date對象

? ? ? ? //情況一:

//? ? ? ? Date date4 = new java.sql.Date(2343243242323L);

//? ? ? ? java.sql.Date date5 = (java.sql.Date) date4;

? ? ? ? //情況二:

? ? ? ? Date date6 = new Date();

? ? ? ? java.sql.Date date7 = new java.sql.Date(date6.getTime());

? ? }

3. java.text.SimpleDateFormat類

SimpleDateFormat的使用:SimpleDateFormat對日期Date類的格式化和解析

1.兩個操作:

? 1.1 格式化:日期 --->字符串

? 1.2 解析:格式化的逆過程,字符串 ---> 日期

2.SimpleDateFormat的實(shí)例化

? 2.1 SimpleDateFormat() :默認(rèn)的模式和語言環(huán)境創(chuàng)建對象

? 2.2 public SimpleDateFormat(String pattern):該構(gòu)造方法可以用參數(shù)pattern 指定的格式創(chuàng)建一個對象

@Test

? ? public void testSimpleDateFormat() throws ParseException {

? ? ? ? //實(shí)例化SimpleDateFormat:使用默認(rèn)的構(gòu)造器

? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat();

? ? ? ? //格式化:日期 --->字符串

? ? ? ? Date date = new Date();

? ? ? ? System.out.println(date);

? ? ? ? String format = sdf.format(date);

? ? ? ? System.out.println(format);

? ? ? ? //解析:格式化的逆過程妓局,字符串 ---> 日期

? ? ? ? String str = "19-12-18 上午11:43";

? ? ? ? Date date1 = sdf.parse(str);

? ? ? ? System.out.println(date1);

? ? ? ? //*************按照指定的方式格式化和解析:調(diào)用帶參的構(gòu)造器*****************

//? ? ? ? SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");

? ? ? ? SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

? ? ? ? //格式化

? ? ? ? String format1 = sdf1.format(date);

? ? ? ? System.out.println(format1);//2019-02-18 11:48:27

? ? ? ? //解析:要求字符串必須是符合SimpleDateFormat識別的格式(通過構(gòu)造器參數(shù)體現(xiàn)),

? ? ? ? //否則总放,拋異常

? ? ? ? Date date2 = sdf1.parse("2020-02-18 11:48:27");

? ? ? ? System.out.println(date2);

? ? }

?4. java.util.Calendar(日歷)類 ----抽象類

Calendar日歷類(抽象類)的使用

Calendar是一個抽象基類呈宇,主用用于完成日期字段之間相互操作的功能。

? ? 獲取Calendar實(shí)例的方法

? ? ? ? 使用Calendar.getInstance()方法

? ? ? ? 調(diào)用它的子類GregorianCalendar的構(gòu)造器局雄。

? ? 一個Calendar的實(shí)例是系統(tǒng)時間的抽象表示甥啄,通過get(int field)方法來取得想 要的時間信息。

? 比如YEAR炬搭、MONTH蜈漓、DAY_OF_WEEK、HOUR_OF_DAY 宫盔、 MINUTE融虽、SECOND

? ? ? ? ? public void set(int field,int value)

? ? ? ? ? public void add(int field,int amount)

? ? ? ? ? public final Date getTime()

? ? ? ? ? public final void setTime(Date date)

? ? 注意:

? ? ? ? 獲取月份時:一月是0,二月是1飘言,以此類推衣形,12月是11

? ? ? ? 獲取星期時:周日是1,周二是2 姿鸿, 谆吴。。苛预。句狼。周六是7

@Test

? ? public void testCalendar(){

? ? ? ? //1.實(shí)例化

? ? ? ? //方式一:創(chuàng)建其子類(GregorianCalendar)的對象

? ? ? ? //方式二:調(diào)用其靜態(tài)方法getInstance()

? ? ? ? Calendar calendar = Calendar.getInstance();

//? ? ? ? System.out.println(calendar.getClass());

? ? ? ? //2.常用方法

? ? ? ? //get()

? ? ? ? int days = calendar.get(Calendar.DAY_OF_MONTH);//這個月的第幾天

? ? ? ? System.out.println(days);

? ? ? ? System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

? ? ? ? //set()

? ? ? ? //calendar可變性

? ? ? ? calendar.set(Calendar.DAY_OF_MONTH,22);

? ? ? ? days = calendar.get(Calendar.DAY_OF_MONTH);

? ? ? ? System.out.println(days);

? ? ? ? //add()

? ? ? ? calendar.add(Calendar.DAY_OF_MONTH,-3);

? ? ? ? days = calendar.get(Calendar.DAY_OF_MONTH);

? ? ? ? System.out.println(days);

? ? ? ? //getTime():日歷類---> Date

? ? ? ? Date date = calendar.getTime();

? ? ? ? System.out.println(date);

? ? ? ? //setTime():Date ---> 日歷類

? ? ? ? Date date1 = new Date();

? ? ? ? calendar.setTime(date1);

? ? ? ? days = calendar.get(Calendar.DAY_OF_MONTH);

? ? ? ? System.out.println(days);

? ? }

二、JDK8中新日期時間API

1.新時間日期API

2.?LocalDate热某、LocalTime腻菇、LocalDateTime的使用

LocalDate、LocalTime昔馋、LocalDateTime 類是其中較重要的幾個類筹吐,它們的實(shí)例 是不可變的對象,分別表示使用 ISO-8601日歷(公歷)系統(tǒng)的日期秘遏、時間丘薛、日期和時間。

LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存儲 生日邦危、紀(jì)念日等日期洋侨。

LocalTime表示一個時間,而不是日期倦蚪。

LocalDateTime是用來表示日期和時間的希坚,這是一個最常用的類之一。

創(chuàng)建日期時間實(shí)例:調(diào)用兩個靜態(tài)方法now()陵且、of()裁僧。

now() :根據(jù)當(dāng)前時間創(chuàng)建對象/指定時區(qū)的對象

of():根據(jù)指定日期/時間創(chuàng)建對象

? /*

LocalDate、LocalTime、LocalDateTime 的使用

說明:

1.LocalDateTime相較于LocalDate锅知、LocalTime录择,使用頻率要高

2.類似于Calendar

*/

? ? //now():獲取當(dāng)前的日期商膊、時間斩跌、日期+時間

? ? LocalDate localDate = LocalDate.now();

? ? LocalTime localTime = LocalTime.now();

? ? LocalDateTime localDateTime = LocalDateTime.now();

? ? System.out.println(localDate);

? ? System.out.println(localTime);

? ? System.out.println(localDateTime);

? ? //of():設(shè)置指定的年仗嗦、月、日昌妹、時捶枢、分、秒飞崖。沒有偏移量

? ? LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);

? ? System.out.println(localDateTime1);

? ? //getXxx():獲取相關(guān)的屬性

? ? System.out.println(localDateTime.getDayOfMonth());

? ? System.out.println(localDateTime.getDayOfWeek());

? ? System.out.println(localDateTime.getMonth());

? ? System.out.println(localDateTime.getMonthValue());

? ? System.out.println(localDateTime.getMinute());

? ? //體現(xiàn)不可變性

? ? //withXxx():設(shè)置相關(guān)的屬性

? ? LocalDate localDate1 = localDate.withDayOfMonth(22);

? ? System.out.println(localDate);

? ? System.out.println(localDate1);

? ? LocalDateTime localDateTime2=localDateTime.withHour(4);

? ? System.out.println(localDateTime);

? ? System.out.println(localDateTime2);

? ? //不可變性? ? ? ?

LocalDateTime? localDateTime3=localDateTime.plusMonths(3);

? ? System.out.println(localDateTime);

? ? System.out.println(localDateTime3);

LocalDateTime localDateTime4 = localDateTime.minusDays(6);

? ? System.out.println(localDateTime);

? ? System.out.println(localDateTime4);

}

3.Instant類的使用

Instant:時間線上的一個瞬時點(diǎn)烂叔。 這可能被用來記錄應(yīng)用程序中的事件時間 戳。

/*

Instant的使用

類似于 java.util.Date類

*/

@Test

public void test2(){

? ? //now():獲取本初子午線對應(yīng)的標(biāo)準(zhǔn)時間

? ? Instant instant = Instant.now();

? ? System.out.println(instant);//2019-02-18T07:29:41.719Z

? ? //添加時間的偏移量

? ? OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));

? ? System.out.println(offsetDateTime);//2019-02-18T15:32:50.611+08:00

? ? //toEpochMilli():獲取自1970年1月1日0時0分0秒(UTC)開始的毫秒數(shù)? ---> Date類的getTime()

? ? long milli = instant.toEpochMilli();

? ? System.out.println(milli);

? ? //ofEpochMilli():通過給定的毫秒數(shù)固歪,獲取Instant實(shí)例? -->Date(long millis)

? ? Instant instant1 = Instant.ofEpochMilli(1550475314878L);

? ? System.out.println(instant1);

}

4.DataTimeFormatter的使用

/*

? ? DateTimeFormatter:格式化或解析日期蒜鸡、時間

? ? 類似于SimpleDateFormat

*/

? ? @Test

? ? public void test3(){

//? ? ? ? 方式一:預(yù)定義的標(biāo)準(zhǔn)格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME

? ? ? ? DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

? ? ? ? //格式化:日期-->字符串

? ? ? ? LocalDateTime localDateTime = LocalDateTime.now();

? ? ? ? String str1 = formatter.format(localDateTime);

? ? ? ? System.out.println(localDateTime);

? ? ? ? System.out.println(str1);//2019-02-18T15:42:18.797

? ? ? ? //解析:字符串 -->日期

? ? ? ? TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");

? ? ? ? System.out.println(parse);

//? ? ? ? 方式二:

//? ? ? ? 本地化相關(guān)的格式牢裳。如:ofLocalizedDateTime()

//? ? ? ? FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :適用于LocalDateTime

? ? ? ? DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);

? ? ? ? //格式化

? ? ? ? String str2 = formatter1.format(localDateTime);

? ? ? ? System.out.println(str2);//2019年2月18日 下午03時47分16秒

//? ? ? 本地化相關(guān)的格式逢防。如:ofLocalizedDate()

//? ? ? FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 適用于LocalDate

? ? ? ? DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);

? ? ? ? //格式化

? ? ? ? String str3 = formatter2.format(LocalDate.now());

? ? ? ? System.out.println(str3);//2019-2-18

//? ? ? 重點(diǎn): 方式三:自定義的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)

? ? ? ? DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

? ? ? ? //格式化

? ? ? ? String str4 = formatter3.format(LocalDateTime.now());

? ? ? ? System.out.println(str4);//2019-02-18 03:52:09

? ? ? ? //解析

? ? ? ? TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");

? ? ? ? System.out.println(accessor);

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒲讯,一起剝皮案震驚了整個濱河市忘朝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌判帮,老刑警劉巖局嘁,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晦墙,居然都是意外死亡悦昵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門晌畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旱捧,“玉大人,你說我怎么就攤上這事踩麦。” “怎么了氓癌?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵谓谦,是天一觀的道長。 經(jīng)常有香客問我贪婉,道長反粥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮才顿,結(jié)果婚禮上莫湘,老公的妹妹穿的比我還像新娘。我一直安慰自己郑气,他們只是感情好幅垮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尾组,像睡著了一般忙芒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讳侨,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天呵萨,我揣著相機(jī)與錄音,去河邊找鬼跨跨。 笑死潮峦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勇婴。 我是一名探鬼主播忱嘹,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咆耿!你這毒婦竟也來了德谅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萨螺,失蹤者是張志新(化名)和其女友劉穎窄做,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慰技,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椭盏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吻商。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掏颊。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艾帐,靈堂內(nèi)的尸體忽然破棺而出乌叶,到底是詐尸還是另有隱情,我是刑警寧澤柒爸,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布准浴,位于F島的核電站,受9級特大地震影響捎稚,放射性物質(zhì)發(fā)生泄漏乐横。R本人自食惡果不足惜求橄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葡公。 院中可真熱鬧罐农,春花似錦、人聲如沸催什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛆楞。三九已至溯乒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豹爹,已是汗流浹背裆悄。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臂聋,地道東北人光稼。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像孩等,于是被迫代替她去往敵國和親艾君。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359