Java 時間日期整理
阿新 • • 發佈:2018-06-13
序號 set方法 格式 pat tab 整型 col reg chang
java.util.Date類
java.util提供了Date類來封裝日期和時間。實例化Date類的兩個構造函數,
Date();--當前時間
Date(long millisec);--距離格林威治時間1970年1月1日millisec毫秒的時間
使用SimpleDateFormat實現字符串和日期的相互轉換
1 public static void main(String[] args) {
// yyyy是年,MM是月,dd是日, HH是(24小時制)時,hh是(12小時制)時,mm是分,ss是秒 2 SimpleDateFormat sdf = newSimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 3 Date date = new Date(); 4 System.out.println(sdf.format(date)); 5 }
輸出結果:2018/06/13 14:04:33
使用DateTimeFormatter格式化日期與解析字符串(Java8 新增)
1 public static void main(String[] args) { 2 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");3 LocalDateTime date = LocalDateTime.now(); 4 System.out.println(dtf.format(date)); 5 }
輸出結果:2018-06-13 14:31:29
1 public static void main(String[] args) { 2 String timeStr = "2018-06-13"; 3 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");4 LocalDate date = LocalDate.parse(timeStr, dtf); 5 System.out.println(date); 6 }
輸出結果:2018-06-13
SimpleDateFormat與DateTimeFormatter的區別在於:DateTimeFormatter是線程安全的,而SimpleDateFormat並不是線程安全。
簡單的DateFormat格式化編碼
字母 | 描述 | 示例 |
---|---|---|
G | 紀元標記 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一個月的日期 | 10 |
h | A.M./P.M. (1~12)格式小時 | 12 |
H | 一天中的小時 (0~23) | 22 |
m | 分鐘數 | 30 |
s | 秒數 | 55 |
S | 毫秒數 | 234 |
E | 星期幾 | Tuesday |
D | 一年中的日子 | 360 |
F | 一個月中第幾周的周幾 | 2 (second Wed. in July) |
w | 一年中第幾周 | 40 |
W | 一個月中第幾周 | 1 |
a | A.M./P.M. 標記 | PM |
k | 一天中的小時(1~24) | 24 |
K | A.M./P.M. (0~11)格式小時 | 10 |
z | 時區 | Eastern Standard Time |
‘ | 文字定界符 | Delimiter |
" | 單引號 | ` |
Calendar類
1 public static void main(String[] args) {
2 Calendar cal = Calendar.getInstance();
3 System.out.println(cal.get(Calendar.YEAR));//年
4 System.out.println(cal.get(Calendar.MONTH));//月(與當前月少一)
5 System.out.println(cal.get(Calendar.DATE));//日
6 System.out.println(cal.get(Calendar.HOUR_OF_DAY));//時
7 System.out.println(cal.get(Calendar.MINUTE));//分
8 System.out.println(cal.get(Calendar.SECOND));//秒
9 }
Calendar類對象字段類型
Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是采用的這種思想
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意義完全相同 |
Calendar.HOUR | 12小時制的小時 |
Calendar.HOUR_OF_DAY | 24小時制的小時 |
Calendar.MINUTE | 分鐘 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期幾 |
Calendar類對象信息的設置
Set設置
如果只設定某個字段,例如日期的值,則可以使用如下set方法:
1 public static void main(String[] args) {
2 Calendar cal = Calendar.getInstance();
3 //設置年份為:2017年
4 cal.set(Calendar.YEAR,2017);
5 System.out.println(cal.getTime());
6
7 }
其他字段屬性set的意義以此類推
Add設置
1 public static void main(String[] args) {
2 Calendar cal = Calendar.getInstance();
3 //前一天的日期
4 cal.add(Calendar.DATE, -1);
5 System.out.println(cal.getTime());
6 }
LocalDateTime 同樣可以實現獲取前一天的時間
1 public static void main(String[] args) {
2 LocalDateTime ldt = LocalDateTime.now();
3 LocalDateTime yesterday = ldt.minusDays(1);
4 System.out.println(yesterday);
5 }
GregorianCalendar類
Calendar類實現了公歷日歷,GregorianCalendar是Calendar類的一個具體實現。
Calendar 的getInstance()方法返回一個默認用當前的語言環境和時區初始化的GregorianCalendar對象。GregorianCalendar定義了兩個字段:AD和BC。這些代表公歷定義的兩個時代。
下面列出GregorianCalendar對象的幾個構造方法:
序號 | 構造函數和說明 |
1 | GregorianCalendar() 在具有默認語言環境的默認時區內使用當前時間構造一個默認的 GregorianCalendar。 |
2 | GregorianCalendar(int year, int month, int date) 在具有默認語言環境的默認時區內構造一個帶有給定日期設置的 GregorianCalendar |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) 為具有默認語言環境的默認時區構造一個具有給定日期和時間設置的 GregorianCalendar。 |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 為具有默認語言環境的默認時區構造一個具有給定日期和時間設置的 GregorianCalendar。 |
5 | GregorianCalendar(Locale aLocale) 在具有給定語言環境的默認時區內構造一個基於當前時間的 GregorianCalendar。 |
6 | GregorianCalendar(TimeZone zone) 在具有默認語言環境的給定時區內構造一個基於當前時間的 GregorianCalendar。 |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) 在具有給定語言環境的給定時區內構造一個基於當前時間的 GregorianCalendar。 |
這裏是GregorianCalendar 類提供的一些有用的方法列表:
序號 | 方法和說明 |
1 | void add(int field, int amount) 根據日歷規則,將指定的(有符號的)時間量添加到給定的日歷字段中。 |
2 | protected void computeFields() 轉換UTC毫秒值為時間域值 |
3 | protected void computeTime() 覆蓋Calendar ,轉換時間域值為UTC毫秒值 |
4 | boolean equals(Object obj) 比較此 GregorianCalendar 與指定的 Object。 |
5 | int get(int field) 獲取指定字段的時間值 |
6 | int getActualMaximum(int field) 返回當前日期,給定字段的最大值 |
7 | int getActualMinimum(int field) 返回當前日期,給定字段的最小值 |
8 | int getGreatestMinimum(int field) 返回此 GregorianCalendar 實例給定日歷字段的最高的最小值。 |
9 | Date getGregorianChange() 獲得格裏高利歷的更改日期。 |
10 | int getLeastMaximum(int field) 返回此 GregorianCalendar 實例給定日歷字段的最低的最大值 |
11 | int getMaximum(int field) 返回此 GregorianCalendar 實例的給定日歷字段的最大值。 |
12 | Date getTime() 獲取日歷當前時間。 |
13 | long getTimeInMillis() 獲取用長整型表示的日歷的當前時間 |
14 | TimeZone getTimeZone() 獲取時區。 |
15 | int getMinimum(int field) 返回給定字段的最小值。 |
16 | int hashCode() 重寫hashCode. |
17 | boolean isLeapYear(int year) 確定給定的年份是否為閏年。 |
18 | void roll(int field, boolean up) 在給定的時間字段上添加或減去(上/下)單個時間單元,不更改更大的字段。 |
19 | void set(int field, int value) 用給定的值設置時間字段。 |
20 | void set(int year, int month, int date) 設置年、月、日的值。 |
21 | void set(int year, int month, int date, int hour, int minute) 設置年、月、日、小時、分鐘的值。 |
22 | void set(int year, int month, int date, int hour, int minute, int second) 設置年、月、日、小時、分鐘、秒的值。 |
23 | void setGregorianChange(Date date) 設置 GregorianCalendar 的更改日期。 |
24 | void setTime(Date date) 用給定的日期設置Calendar的當前時間。 |
25 | void setTimeInMillis(long millis) 用給定的long型毫秒數設置Calendar的當前時間。 |
26 | void setTimeZone(TimeZone value) 用給定時區值設置當前時區。 |
27 | String toString() 返回代表日歷的字符串。 |
獲取當前毫秒時間
public static void main(String[] args) { Calendar.getInstance().getTimeInMillis(); System.currentTimeMillis(); Clock.systemDefaultZone().millis(); SimpleDateFormat sdf = new SimpleDateFormat(); System.out.println(sdf.format(Calendar.getInstance().getTimeInMillis())); System.out.println(sdf.format(System.currentTimeMillis())); System.out.println(sdf.format(Clock.systemDefaultZone().millis()));
}
參考文章:https://www.cnblogs.com/blackheartinsunshine/p/6019408.html
Java 時間日期整理