??JDK8中新的日期類api,在之前雖然也有Date和Calendar日歷類,但是處理日期有一定不方便,而且有偏移性(從0開始),并且不是執行緒安全的,所以JDK8中的新特性之一就是新的日期類,這簡化了日期時間的管理,
Date與SimpleDateFormat
格式化:日期——>字串
決議:字串——>日期
@Test
public void test1(){
Date date = new Date();
System.out.println(date);//Sun Feb 28 04:57:46 CST 2021 格式化
System.out.println(date.getTime());//時間戳,當前日期的毫秒數,1614459466456
//y 代表年
//M 代表月
//d 代表日
//H 代表24進制的小時
//h 代表12進制的小時
//m 代表分鐘
//s 代表秒
//S 代表毫秒
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss SSS");
String s = simpleDateFormat.format(date);
System.out.println(s);//2021-02-28 04-57-46 456
try {
Date parse = simpleDateFormat.parse("2021-02-28 04-56-08 504"); 決議
System.out.println(parse);//Sun Feb 28 04:56:08 CST 2021
} catch (ParseException e) {
e.printStackTrace();
}
}
SimpleDateFormat執行緒不安全

JDK8
本地時間日期Local
一般使用now或者of方法實體化local日期時間物件,
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
now方法
@Test
public void TestDate1(){
//now()獲取當前日期時間
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();//使用頻率更高
System.out.println(localDate);//2021-02-27
System.out.println(localTime);//22:07:09.125
System.out.println(localDateTime);//2021-02-27T22:07:09.125
}
of方法
指定時間日期
@Test
public void TestDate2(){
//of()指定日期,沒有偏移量
LocalDateTime localDateTime = LocalDateTime.of(2021,1,1,12,12,12);
System.out.println(localDateTime);//2021-01-01T12:12:12
}
get方法
獲取相關屬性
@Test
public void TestDate3(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2021-02-27T22:22:52.143
System.out.println(localDateTime.getYear());//2021
System.out.println(localDateTime.getDayOfYear());//58
}

根據命名可以知道方法功能,
with方法
設定相關屬性
@Test
public void TestDate4(){
//不可變性,不影響本身時間
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2021-02-27T22:35:09.096
LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(13);//修改為本月的多少天
System.out.println(localDateTime1);//2021-02-13T22:35:09.096
// LocalDateTime localDateTime1 = localDateTime.withDayOfMonth(40);
// System.out.println(localDateTime1);
// java.time.DateTimeException: 不能超過范圍
// Invalid value for DayOfMonth (valid values 1 - 28/31): 40
LocalDateTime localDateTime2 = localDateTime.withDayOfYear(35);//修改為本年的多少天
System.out.println(localDateTime2);//2021-02-04T22:35:09.096
LocalDateTime localDateTime3 = localDateTime.withHour(2);//修改小時
System.out.println(localDateTime3);//2021-02-04T02:35:09.096
}

plus/minus方法
在原有基礎上,添加、減去時間日期,
@Test
public void TestDate5(){
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);//2021-02-27T22:44:33.848
LocalDateTime localDateTime1 = localDateTime.plusHours(2);
System.out.println(localDateTime1);//2021-02-28T00:44:33.848
LocalDateTime localDateTime2 = localDateTime.minusDays(5);
System.out.println(localDateTime2);//2021-02-22T22:46:27.612
}


Instant類
時間戳,類似于java.util.Date類
@Test
public void test1(){
//時間戳
Instant instant = Instant.now();
System.out.println(instant);//2021-02-27T15:41:40.496Z,標準時間
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); //添加偏移量
System.out.println(offsetDateTime);//2021-02-27T23:41:40.496+08:00,東八區
long milli = instant.toEpochMilli();//獲取自1970/1/1/00:00:00 開始的毫秒數
System.out.println(milli);//1614440500496
Instant instant1 = Instant.ofEpochMilli(1614439220460L); //通過給定毫秒數,回傳時間
System.out.println(instant1);//2021-02-27T15:20:20.460Z
}
DateTimeFormatter日期時間格式化類
格式化或者決議日期時間,類似于SImpleDateFormat,但是這是一個不可變且執行緒安全的

格式化:日期——>字串 —— format方法
決議:字串——>日期 ——parse方法
最常用的自定義方式
@Test
public void test3(){
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String s = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(s);//2021-02-28 04:39:49
TemporalAccessor parse = dateTimeFormatter.parse("2021-02-28 04:37:01");
System.out.println(parse);//{SecondOfMinute=1, MinuteOfHour=37, NanoOfSecond=0, MicroOfSecond=0, MilliOfSecond=0, HourOfAmPm=4},ISO resolved to 2021-02-28
}
預定義的標準格式
@Test
public void test1(){
//預定義的標準格式
DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime now = LocalDateTime.now();
String s = isoLocalDate.format(now);//格式化,型別改變 日期——>字串
System.out.println(now);//2021-02-28T04:41:18.110
System.out.println(s);//2021-02-28T04:41:18.11
TemporalAccessor parse = isoLocalDate.parse("2021-02-28T04:09:40.075");//決議:字串——>日期
System.out.println(parse);//{},ISO resolved to 2021-02-28T04:09:40.075
}
三種格式

本地化相關


FUll是LocalDate形式,不能使用LocalDateTime,否則報錯
@Test
public void test2(){
//本地化相關
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//2021-02-28T04:42:11.793
String s = dateTimeFormatter.format(now);
System.out.println(s);//2021-2-28 4:42:11
String s1 = dateTimeFormatter1.format(now);
System.out.println(s1);//2021年2月28日 上午04時42分11秒
String s2 = dateTimeFormatter2.format(now);
System.out.println(s2);//21-2-28 上午4:42
System.out.println("----------");
DateTimeFormatter dateTimeFormatter3 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
LocalDate now1 = LocalDate.now();
System.out.println(now1);//2021-02-28
String format = dateTimeFormatter3.format(now1);
System.out.println(format);//2021年2月28日 星期日
TemporalAccessor parse = dateTimeFormatter3.parse("2021年2月28日 星期日");
System.out.println(parse);//{},ISO resolved to 2021-02-28
//一般使用自定義,除非有要求
}
與傳統日期處理轉換

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264789.html
標籤:其他
上一篇:21/2/28 集合
