JDK1.7日期時間操作
示例小結
public class DateTest {
public static final String FORMAT_DATE = "yyyy-MM-dd";
public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_MIN = "yyyy-MM-dd HH:mm";
public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.S";
private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};
/**
* SimpleDateFormat時間格式化
*/
@Test
public void test1() throws ParseException {
Date date = new Date();
/**
*常用格式:
* yyyy-MM-dd
* yyyy-MM-dd HH:mm:ss
* yyyy-MM-dd HH:mm
*/
//根據約定好的pattern時間格式進行格式化和解析
SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
//格式化
String dateStr = dateFormat.format(date);
System.out.println(dateStr);
//字串解析成date物件
Date parseDate = dateFormat.parse(dateStr);
System.out.println(parseDate);
}
/**
* 2021-12-04 00:49:39
* Sat Dec 04 00:49:39 CST 2021
*/
/**
* Calendar(抽象類)日曆類的使用
*/
@Test
public void test2() {
//兩種建立
// Calendar calendar = new GregorianCalendar();
//預設用getInstance()建立
Calendar calendar = Calendar.getInstance();
//get()
//根據日曆型別獲取資料
//當天日曆對應的一個月的第幾天
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//set() 設定日期
calendar.set(Calendar.DAY_OF_MONTH, 9);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//新增天數,負數表示減天數
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//getTime() 日曆類轉Date
Date date = calendar.getTime();
System.out.println(date);
//根據Date日期設定日曆
calendar.setTime(new Date());
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
}
/**
* 4
* 9
* 8
* Wed Dec 08 01:55:33 CST 2021
* 4
*/
}
JDK1.8日期時間操作——重點
LocalDateTime
示例小結
public class JDKDateTest {
@Test
public void test1() {
//建立日期物件
//獲取當前日期時間 now()
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
// 2021-12-04
// 23:44:44.112
// 2021-12-04T23:44:44.112
//建立指定日期時間的of()方法
LocalDateTime dateTime = LocalDateTime.of(2020, 10, 10, 12, 12, 12);
LocalDate date = LocalDate.of(2020, 10, 10);
LocalTime time = LocalTime.of(12, 12, 12);
System.out.println(dateTime);
System.out.println(date);
System.out.println(time);
// 2020-10-10T12:12:12
// 2020-10-10
// 12:12:12
//getXXX方法 獲取時間裡的年月日的值相關的屬性
int dayOfYear = dateTime.getDayOfYear();
Month month = dateTime.getMonth();
int monthValue = dateTime.getMonthValue();
int dayOfMonth = dateTime.getDayOfMonth();
System.out.println(dayOfYear);
System.out.println(month);
System.out.println(monthValue);
System.out.println(dayOfMonth);
// 284
// OCTOBER
// 10
// 10
//withXXX() 設定指定的時間相關的屬性返回新的日期,原來的日期是不變的
//LocalDateTime JDK時間不可變性,因此是執行緒安全的。
LocalDateTime withDateTime1 = dateTime.with(localDateTime);
LocalDateTime withDateTime2 = dateTime.withDayOfMonth(11);
System.out.println("原來日期:"+dateTime);
System.out.println("修改後日期1:"+withDateTime1);
System.out.println("修改後日期2:"+withDateTime2);
System.out.println("-----------------------------------");
// 原來日期:2020-10-10T12:12:12
// 修改後日期1:2021-12-04T23:44:44.112
// 修改後日期2:2020-10-11T12:12:12
//日期時間的新增刪除
//可以直接新增想要新增的天數或其他屬性值,返回的日期時間會自動處理為對應的日期時間
LocalDateTime plusDateTime = dateTime.plusDays(60);
LocalDateTime plusDateTime2 = dateTime.plusHours(70);
//加減時間都可以操作負數,負數對應就是相反的操作,沒有問題
LocalDateTime minusDateTime1 = dateTime.minusDays(-1);
System.out.println("原來日期:"+dateTime);
System.out.println(plusDateTime);
System.out.println(plusDateTime2);
System.out.println(minusDateTime1);
// 原來日期:2020-10-10T12:12:12
// 2020-12-09T12:12:12
// 2020-10-13T10:12:12
// 2020-10-11T12:12:12
}
}
Instant——瞬時——類似於Date
示例小結
public class InstantTest {
@Test
public void test1() {
//獲取本初子午線對應的當前時間
Instant instant = Instant.now();
long timeMillis = System.currentTimeMillis();
System.out.println(instant);
// 2021-12-04T16:16:27.593Z
//新增東八區時間的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
// 2021-12-05T00:16:27.593+08:00
//獲取19701-1-1 00:00:00到現在的毫秒數,類似於System.currentTimeMillis()
long epochMilli = instant.toEpochMilli();
System.out.println("toEpochMilli "+epochMilli);
System.out.println("currentTimeMillis "+timeMillis);
// toEpochMilli 1638634587593
// currentTimeMillis 1638634587593
//根據時間戳獲取Instant示例,類似於Date(long date)
Instant instant1 = Instant.ofEpochMilli(epochMilli);
System.out.println(instant1);
// 2021-12-04T16:16:27.593Z
}
}
DateTimeFormatter——格式化解析
時間格式化注意
yyyy-MM-dd HH:mm:ss HH表示24小時時間制
yyyy-MM-dd hh:mm:ss HH表示12小時時間制
程式碼示例
@Test
public void test2(){
LocalDateTime now = LocalDateTime.now();
//自定義格式化型別ofPattern()
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化
String nowStr = formatter.format(now);
System.out.println(nowStr);
//2021-12-05 00:49:37
//解析
LocalDateTime dateTime = LocalDateTime.parse(nowStr, formatter);
System.out.println(dateTime);
//2021-12-05T00:49:37
TemporalAccessor parse1 = formatter.parse(nowStr);
System.out.println(parse1);
// {},ISO resolved to 2021-12-05T00:49:37
//強轉報錯,要使用LocalDateTime.parse(nowStr, formatter);
//java.lang.ClassCastException: java.time.format.Parsed cannot be cast to java.time.LocalDateTime
// LocalDateTime parse2 = (LocalDateTime) formatter.parse(nowStr);
// System.out.println(parse2);
}
其他
UTC 和 GMT的區別是什麼啊?
GMT(Greenwish Mean Time 格林威治平時),這是UTC的民間名稱。GMT=UTC
沒有區別。
參考
480-488