摘要:獲取當(dāng)天是幾號(hào)獲取當(dāng)天是星期幾獲取本月的第一天取本月最后一天是不是很贊提供時(shí)分秒不提供年月日,也是線程安全并且不可變類。樣例獲取當(dāng)前的小時(shí)小時(shí)數(shù)加結(jié)果包含年月日時(shí)分秒,精確到納秒級(jí)別,同樣是線程安全并且不可變類。
java.util.Date
包含有年月日時(shí)分秒,精確到毫秒級(jí)別。
官方解釋:
</>復(fù)制代碼
// The class Date represents a specific instant in time, with millisecond precision.
</>復(fù)制代碼
// 語(yǔ)句
Date date = new Date();
System.out.println(date);
//輸出結(jié)果
Sat Feb 03 14:48:47 CST 2018
java.sql.Date
包含年月日,時(shí)分秒都被設(shè)置為0,之所以這樣設(shè)計(jì)是為了適應(yīng)SQL中的DATE類型。
官方解釋:
</>復(fù)制代碼
// A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.
// To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be "normalized" by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.
注意,雖然說(shuō)這個(gè)類是使用年月日的,但是初始化的時(shí)候,需要一個(gè)long類型的參數(shù),這個(gè)參數(shù)代表著January 1, 1970, 00:00:00 GMT到某個(gè)時(shí)間的毫秒數(shù)。如果是當(dāng)前時(shí)間的話,可以用System.currentTimeMillis()或者new Date().getTime()獲取。
</>復(fù)制代碼
// 語(yǔ)句
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
System.out.println(sqlDate);
// 輸出結(jié)果
2018-02-03
java.sql.Time
包含時(shí)分秒,這個(gè)也是為了SQL中的TIME類型而出現(xiàn)的。
</>復(fù)制代碼
// 語(yǔ)句
Time time = new Time(System.currentTimeMillis());
System.out.println(time);
// 輸出結(jié)果
15:07:35
java.sql.Timestamp
時(shí)間戳,適配于SQL中的TIMESTAMP類型而出現(xiàn)的,精確到納秒級(jí)別。
格式化輸出:java.text.SimpleDateFormat這個(gè)類提供時(shí)間的各種格式化輸出和將字符串轉(zhuǎn)換為時(shí)間類,簡(jiǎn)單來(lái)說(shuō),它擁有date → text 以及text → date的能力。
例如:將Date格式化輸出
</>復(fù)制代碼
// 格式化輸出
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String dateStr = sdf.format(new Date());
System.out.println(dateStr);
// 結(jié)果
2018年02月03日 15:20:58
例如:將時(shí)間字符串轉(zhuǎn)化為Date
</>復(fù)制代碼
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = sdf.parse("2018年02月03日 15:20:58");
注意,SimpleDateFormat.parse(String source)中的source格式一定得是SimpleDateFormat當(dāng)前使用的格式。如這個(gè)例子中使用了yyyy年MM月dd日 HH:mm:ss,所以傳入了2018年02月03日 15:20:58時(shí)間字符串。
PS:有些同學(xué)對(duì)yyyy或者MM這些字母代表的含義不懂的話,建議使用這個(gè)類的時(shí)候,看一下源碼,源碼類上都有對(duì)這些字母的解釋。
日歷類,這個(gè)類大多被用于獲取時(shí)間的特殊屬性,比如說(shuō)獲取某個(gè)時(shí)間對(duì)象的年份、月份、星期等
</>復(fù)制代碼
Calendar calendar = Calendar.getInstance();
// 設(shè)置時(shí)間,不設(shè)置的話,默認(rèn)是當(dāng)前時(shí)間
calendar.setTime(new Date());
// 獲取時(shí)間中的年份
int year = calendar.get(Calendar.YEAR);
從JDK1.8開始,Calendar增加新的構(gòu)造方式
</>復(fù)制代碼
// since jdk 1.8
Calendar calendar = new Calendar.Builder().setDate(2018, 3, 25).build();
int year = calendar.get(Calendar.YEAR);
System.out.println(year);
階段小結(jié)
以上大概就是jdk1.8之前的操作時(shí)間方式了。然后,從jdk1.8開始,有了新的操作時(shí)間的類。
java.time.LocalDateLocalDate提供年月日而不提供時(shí)分秒信息,它是不可變類且線程安全的。它經(jīng)常被用于展示year-month-day,day-of-year,day-of-week,week-of-year等格式的信息。
</>復(fù)制代碼
LocalDate localDate = LocalDate.now();
// 獲取當(dāng)天是幾號(hào)
int dayOfMonth = localDate.getDayOfMonth();
// 獲取當(dāng)天是星期幾
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
// 獲取本月的第一天
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
// 取本月最后一天
LocalDate lastDayOfThisMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
是不是很贊~
java.time.Time提供時(shí)分秒不提供年月日,也是線程安全并且不可變類。它經(jīng)常被用于展示hour-minute-second格式的信息。可以對(duì)時(shí)間進(jìn)行加減等操作。
</>復(fù)制代碼
// 樣例
LocalTime localTime = LocalTime.now();
// 獲取當(dāng)前的小時(shí)
int hour = localTime.getHour();
System.out.println(hour);
// 小時(shí)數(shù)加1
LocalTime addTwoHours = localTime.plusHours(2L);
System.out.println(addTwoHours.getHour());
// 結(jié)果
16
18
java.time.LocalDateTime
包含年月日時(shí)分秒,精確到納秒級(jí)別,同樣是線程安全并且不可變類。它可以操作時(shí)間中的年月日時(shí)分秒并且可以獲取其中的屬性。
</>復(fù)制代碼
LocalDateTime localDateTime = LocalDateTime.now();
// 獲取年
int year = localDateTime.getYear();
// 獲取小時(shí)
int hour = localDateTime.getHour();
// 增加一年
LocalDateTime addOneYear = localDateTime.plusYears(1);
結(jié)語(yǔ)
今天就先這樣啦,希望看到這篇博文的人能有所收獲,同樣,錯(cuò)誤之處還請(qǐng)幫忙指正。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70930.html
摘要:中的詳解必修個(gè)多線程問(wèn)題總結(jié)個(gè)多線程問(wèn)題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...
摘要:本文主要內(nèi)容為簡(jiǎn)單總結(jié)中線程池的相關(guān)信息。方法簇方法簇用于創(chuàng)建固定線程數(shù)的線程池。三種常見線程池的對(duì)比上文總結(jié)了工具類創(chuàng)建常見線程池的方法,現(xiàn)對(duì)三種線程池區(qū)別進(jìn)行比較。 概述 線程可認(rèn)為是操作系統(tǒng)可調(diào)度的最小的程序執(zhí)行序列,一般作為進(jìn)程的組成部分,同一進(jìn)程中多個(gè)線程可共享該進(jìn)程的資源(如內(nèi)存等)。在單核處理器架構(gòu)下,操作系統(tǒng)一般使用分時(shí)的方式實(shí)現(xiàn)多線程;在多核處理器架構(gòu)下,多個(gè)線程能夠...
摘要:基礎(chǔ)問(wèn)題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問(wèn)題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎(chǔ)問(wèn)題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問(wèn)題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 3533·2021-11-24 09:39
閱讀 791·2019-08-30 14:22
閱讀 3043·2019-08-30 13:13
閱讀 2329·2019-08-29 17:06
閱讀 2930·2019-08-29 16:22
閱讀 1265·2019-08-29 10:58
閱讀 2440·2019-08-26 13:47
閱讀 1639·2019-08-26 11:39