时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类
開發中經常涉及到時間與日期,記錄下Java中與時間和日期相關的API
JDK8之前與時間日期相關的類
java.lang.System類
System類提供了一個公共的靜態方法currentTimesMillis()來返回當前時間距離1970年1月1日0時0分0秒之間以毫秒為單位的時間差,也叫時間戳。
@Test
public void test1(){
long time = System.currentTimeMillis();
System.out.println(time);// 打印:1572305456261
}
java.util.Date類和java.sql.Date類
一個類的使用通常需要了解如何實例化和使用常用的方法。java.util.Date類的實例化主要涉及到兩個構造器無參的構造器和帶參數的構造器,常用方法也有兩個toString方法和getTime方法。代碼看下具體的使用:
@Test
public void test2(){
// 構造器1
Date date1 = new Date();
System.out.println(date1.toString());// Tue Oct 29 07:35:09 CST 2019
System.out.println(date1.getTime());// 1572305836011
// 構造器2
Date date2 = new Date(1572305836011L);
System.out.println(date2.toString()); // Tue Oct 29 07:37:16 CST 2019
說明:
關于java.util.Date類需要會使用兩個構造器和兩個方法。
使用空參的構造器: 創建一個對應當前時間的Date對象
使用帶參的構造器:創建指定毫秒數的Date對象
使用toString方法:顯示當前的年,月,日,分,時,秒,時區
使用getTime方法,獲取當前Data對象對應的時間戳
java.sql.Date類是java.util.Date類的子類,主要用于處理數據庫相關的日期格式。這里,同樣只需要了解怎么使用即可。
實例化,使用帶參的構造器,參數是一個long型的。
@Test
public void tese1(){
// java.sql.Date類的使用
java.sql.Date date3 = new java.sql.Date(1572305836011L);// 傳入時間戳
System.out.println(date3.toString());// 2019-10-29
System.out.println(date3.getTime());//1572305836011
// 如何將一個java.sql.Date對象轉化為java.util.Date對象?多態
// 如何將一個java.util.Date對象轉化為java.sql.Date對象?共同點:毫秒數
// 方式一: 多態的做法,強轉
Date date4 = new java.sql.Date(1572305836011L);
java.sql.Date date5 = (java.sql.Date)date4;
// 方式二:
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
System.out.println(date7.toString());
}
java.text.SimpleDateFormat類
Date類的API不易于國際化,大部分被廢棄了,java.text.SimpleDateFormat類是一個不與語言環境有關的方式來格式化和解析日期的具體類。它允許進行 格式化:日期-->文本、 解析:文本-->日期。
對于SimpleDateFormat的使用需要掌握兩個點:
如何實例化?
如何進行格式化和解析?
@Test
public void test1() throws ParseException {
// 1.實例化:使用默認的構造器
SimpleDateFormat sdf = new SimpleDateFormat();
// 2.創建Date對象
Date date = new Date();
System.out.println(date); // Tue Oct 29 13:42:21 CST 2019
// 3.格式化
String date2 = sdf.format(date); //參數是Date類型的
System.out.println(date2); // 2019/10/29 下午1:43
// 4.解析
String str = "2019/10/29 下午1:43";
Date date3 = sdf.parse(str);
System.out.println(date3);
//***************************
//使用帶參的構造器
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String s = simpleDateFormat.format(new Date());
System.out.println(s);
//解析
String s1 = "2020-10-29 02:02:59";
Date date4 = simpleDateFormat.parse(s1);
System.out.println(date4);
}
說明:
使用SimpleDateFormat的默認構造器創建出來的對象,去調用format方法進行時間日期的格式化后出來的格式是固定的,并且是2019/10/29 下午1:43這樣的形式,要解析的字符串也必須以這種格式,否則解析不了。
開發中,常用第二種構造器,可以指定我們想過要輸出的日期格式。
java.util.Calender日歷類(抽象類)
Calendar是一個抽象基類,主用用于完成日期字段之間相互操作的功能。獲取一個Calendar實例的方法如下:
使用Calendar.getInstance()方法
調用它的子類GregorianCalendar的構造器。
Calender的常見使用如下:
@Test
public void test1(){
//1.類的實例化方式:調用Calendar.getInstance方法
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getClass());// class java.util.GregorianCalendar
//2.常用方法
//get()方法
int day1 = calendar.get(calendar.DAY_OF_MONTH);// 獲取calender對象是當前月的第幾天
int day2 = calendar.get(calendar.DAY_OF_YEAR);// 獲取當前calender對象是當前年的第幾天
System.out.println(day1);
System.out.println(day2);
//set()方法
calendar.set(calendar.DAY_OF_MONTH,22); // 將calender對象的DAY_OF_MONTH屬性設置為22,將原先的屬性改了(可變性)
day1 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(day1);
//add()方法
calendar.add(calendar.DAY_OF_MONTH,3); // +3天
day1 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(day1);
calendar.add(calendar.DAY_OF_MONTH,-3);// -3天
day1 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(day1);
//getTime()方法 將日歷類轉換為Date
Date date = calendar.getTime();
System.out.println(date); //Tue Oct 22 13:06:05 CST 2019
//setTime()方法 將Date類轉換為日歷類
Date date1 = new Date(); // 獲取當前時間的Date
calendar.setTime(date1);// 將當前日歷設置為date1對象對應的時間
day1 = calendar.get(calendar.DAY_OF_MONTH);
System.out.println(day1);
}
注意:使用Calender
獲取月份時,一月是0,二月是1,以此類推,12月是11
獲取星期時,周日是1,周一是2,以此類推,周六是7
JDK8之后新的日期時間API
為什么要引進新的時間日期API?
JDK 1.0中包含了一個java.util.Date類,但是它的大多數方法已經在JDK 1.1引入Calendar類之后被棄用了。而Calendar并不比Date好多少。它們面臨的問題是:
可變性:像日期和時間這樣的類應該是不可變的。
偏移性:Date中的年份是從1900開始的,而月份都從0開始。
格式化:格式化只對Date有用,Calendar則不行。
此外,它們也不是線程安全的;不能處理閏秒等。
JDK8中引進了新的時間API是java.time,新的 java.time 中包含了所有關于本地日期(LocalDate)、本地時間(LocalTime)、本地日期時間(LocalDateTime)、時區(ZonedDateTime)和持續時間(Duration)的類。歷史悠久的 Date 類新增了 toInstant() 方法,用于把 Date 轉換成新的表示形式。這些新增的本地化時間日期 API 大大簡化了日期時間和本地化的管理。
LocalDate、LocalTime、LocalDateTime類
LocalDate、LocalTime、LocalDateTime 類是其中較重要的幾個類,它們的實例是不可變的對象,分別表示使用 ISO-8601日歷系統的日期、時間、日期和時間。它們提供了簡單的本地日期或時間,并不包含當前的時間信息,也不包含與時區相關的信息。
LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存儲 生日、紀念日等日期。
LocalTime表示一個時間,而不是日期。
LocalDateTime是用來表示日期和時間的,這是一個最常用的類之一。
同樣,使用一個類還是從如何實例化和有什么方法使用開始。常用方法如下:
示例:
@Test
public void test1(){
// now獲取當前的日期、時間、日期+時間
LocalDate localDate = LocalDate.now();// 獲取當前的本地日期
LocalTime localTime = LocalTime.now();// 獲取當前的本地時間
LocalDateTime localDateTime = LocalDateTime.now();// 獲取當前的本地日期和本地時間
System.out.println(localDate); // 2019-10-31
System.out.println(localTime);// 13:35:03.225722700
System.out.println(localDateTime);// 2019-10-31T13:35:03.225722700
// of方法:設置年月日時分秒,沒有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 24, 13, 23, 56);
System.out.println(localDateTime1); // 2020-10-24T13:23:56
//getXxx()方法 獲取屬性
System.out.println(localDateTime1.getDayOfMonth());// 24 獲取當前對象對應的日期是這個月的第幾天
System.out.println(localDateTime1.getDayOfWeek());// SATURDAY 獲取當前對象對應的日期是星期幾
System.out.println(localDateTime1.getDayOfYear());// 298 獲取當前天是這一年的第幾天
System.out.println(localDateTime1.getMonth());// OCTOBER 獲取月份
System.out.println(localDateTime1.getSecond());// 56 獲取秒數
// withXxx() 設置相關的屬性(體現不可變性,原先對象的with操作不會改變原來對象的屬性)
LocalDateTime localDateTime2 = localDateTime.withHour(4); // 設置小時數為04
System.out.println(localDateTime); // 2019-10-31T13:41:51.553487900
System.out.println(localDateTime2);// 2019-10-31T04:41:51.553487900
// plusXxx() 加操作
LocalDateTime localDateTime3 = localDateTime.plusDays(5); // 在現有時間加上5天
System.out.println(localDateTime); // 2019-10-31T13:45:29.363506800
System.out.println(localDateTime3);// 2019-11-05T13:45:29.363506800
// minusXxx() 減操作
LocalDateTime localDateTime4 = localDateTime.minusMonths(2); // 在現有時間減去2個月
System.out.println(localDateTime.getMonth()); // OCTOBER
System.out.println(localDateTime4.getMonth());// AUGUST
}
常用還是LocalDateTime類。
Instant類
Instant類類似于Date類, java.time包通過值類型Instant提供機器視圖,不提供處理人類意義上的時間單位。Instant表示時間線上的一點,而不需要任何上下文信息,例如,時區。概念上講,它只是簡單的表示自1970年1月1日0時0分0秒(UTC)開始的秒數。因為java.time包是基于納秒計算的,所以Instant的精度可以達到納秒級。
Instant的實例化和常用方法如下:
方法
說明
now()
靜態方法,返回默認UTC時區的Instant類的對象
ofEpochMilli(long EpochMilli)
靜態方法,返回在1970-01-01 00:00:00基礎上加上指定毫秒數之后的Instant類的對象
atOffset(ZoneOffset offset)
結合即時的偏移來創建一個 OffsetDateTime
toEpochMilli()
返回1970-01-01 00:00:00到當前時間的毫秒數,即為時間戳
示例:
@Test
public void test2(){
// now():獲取本初子午線當地的標準時間
Instant instant = Instant.now();
System.out.println(instant); // 2019-10-31T06:01:04.921252200Z
// 在UTC時區的基礎上加上8個時區(北京時間)
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime); // 2019-10-31T14:01:04.921252200+08:00
// 獲取時間戳
System.out.println(instant.toEpochMilli()); // 1572501664921
// ofEpochMilli():通過給定的時間戳,獲取Instant的實例
Instant instant1 = Instant.ofEpochMilli(1572415933220L);
System.out.println(instant1); // 2019-10-30T06:12:13.220Z
}
DateTimeFormatter類
DateTimeFormatter類類似于SimpleDateFormat類,用于格式化與解析日期或時間。
java.time.format.DateTimeFormatter 類:該類提供了三種格式化方法:
預定義的標準格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
本地化相關的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
自定義的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”),常用是這種。
方 法
描 述
ofPattern(String pattern)
靜態方法,返回一個指定字符串格的DateTimeFormatter
format(TemporalAccessor t)
格式化一個日期、時間,返回字符串
parse(CharSequence text)
將指定格式的字符序列解析為一個日期、時間
示例如下:
@Test
public void testDateTimeFormatter(){
// 實例化方式一 預定義的標準格式。如:`ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME`
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime localDateTime = LocalDateTime.now();
// 格式化:將日期轉換為字符串,需要傳入一個TemporalAccessor類型的,而LocalDate、LocalTime和LocalDateTime都是
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime); // 2019-10-31T14:16:15.801854
System.out.println(str1); // 2019-10-31T14:16:15.801854
// 使用標準格式的格式化出來結果是:2019-10-31T14:16:15.801854
// 解析:解析的字符串也必須是標準格式的字符創
TemporalAccessor parse = formatter.parse("2020-10-31T14:16:15.801854");
System.out.println(parse); // {},ISO resolved to 2020-10-31T14:16:15.801854
// 實例化方式二:本地化相關的格式
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);// 使用FormatStyle.SHORT進行格式化
// 格式化
String str2 = formatter1.format(localDateTime);
System.out.println(str2); // 格式化后的格式:2019/10/31 下午2:22
// 實例化方式三:自定義格式
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
// 格式化
String str3 = formatter2.format(LocalDateTime.now());
System.out.println(str3);
// 解析
TemporalAccessor parse1 = formatter2.parse("2019-10-31 02:30:29");
System.out.println(parse1);
}
總結
以上是生活随笔為你收集整理的时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的flush方法_Java中的B
- 下一篇: java 对增删该查进行测试_java连