seo短視頻網(wǎng)頁(yè)入口引流在線(xiàn)百度seo一本通
JDK 8 之前傳統(tǒng)的日期、時(shí)間
Date 類(lèi)
- 代表的是日期和時(shí)間
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 創(chuàng)建一個(gè)Data對(duì)象,代表系統(tǒng)當(dāng)前時(shí)間信息的Date d = new Date();System.out.println(d); // 輸出的是日期與當(dāng)前的時(shí)間信息// 2. 拿到時(shí)間毫秒值long time = d.getTime();System.out.println(time); // 輸出毫秒值// 3. 把時(shí)間毫秒值轉(zhuǎn)換成對(duì)象日期:2s之后的時(shí)間是多少time += 2 * 1000; // 2 ms * 1000 == 2sDate d2 = new Date(time);// 4. 直接把日期對(duì)象的時(shí)間,通過(guò)setTime方法進(jìn)行修改Date d3 = new Date();d3.setTime(time);System.out.println(d3);}
}
SimpleDateFormat 類(lèi)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {// 1. 準(zhǔn)備一些時(shí)間Date d = new Date();System.out.println(d); // 日期+時(shí)間long time = d.getTime();System.out.println(time); // 時(shí)間毫秒值// 2. 格式化日期對(duì)象,和時(shí)間毫秒值SimpleDateFormat obj = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String res = obj.format(d);String res2 = obj.format(time);System.out.println(res);System.out.println(res2);// 3. 常見(jiàn)時(shí)間格式/** y 年* M 月* d 日* H 時(shí)* m 分* s 秒* EEE 星期幾* a 上午/下午* */// 4. 將已被格式化的時(shí)間字符串,轉(zhuǎn)變回原來(lái)的時(shí)間對(duì)象String dateStr = "2023--15-20 15:35:21";SimpleDateFormat obj2 = new SimpleDateFormat("yyyy--MM-dd HH:mm:ss");Date d2 = obj2.parse(dateStr);System.out.println(d2); // 日期+時(shí)間}
}
Calendar 類(lèi)
- Calendar 代表的是系統(tǒng)此刻時(shí)間對(duì)應(yīng)的日歷
- 通過(guò)它可以單獨(dú)獲取、修改時(shí)間中的年、月、日、時(shí)、分、秒等
import java.util.Calendar;
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 得到系統(tǒng)此刻時(shí)間對(duì)應(yīng)的日歷對(duì)象Calendar obj = Calendar.getInstance();System.out.println(obj);// 2. 獲取日歷中的某個(gè)信息int year = obj.get(Calendar.YEAR);System.out.println(year); // 輸出年份int days = obj.get(Calendar.DAY_OF_YEAR);System.out.println(days); // 一年365天中的第x天// 3. 拿到日歷中記錄的日期對(duì)象Date d = obj.getTime();System.out.println(d);// 4. 拿到時(shí)間毫秒值long time = obj.getTimeInMillis();System.out.println(time);// 5. 修改日歷中的某個(gè)信息obj.set(Calendar.MONTH, 9); // 月份是從0開(kāi)始計(jì)算,所以這里是修改為10月System.out.println(obj.get(Calendar.MONTH)); // 9obj.set(Calendar.DAY_OF_YEAR, 250); // 修改為一年中的第250天System.out.println(obj.get(Calendar.DAY_OF_YEAR)); // 250// 6. 為某個(gè)信息增加或者減少多少obj.add(Calendar.DAY_OF_YEAR, 100);obj.add(Calendar.DAY_OF_YEAR, -100);System.out.println(obj.get(Calendar.DAY_OF_YEAR)); // 250}
}
JDK 8 開(kāi)始新增的日期、時(shí)間
它們的優(yōu)點(diǎn)
- 設(shè)計(jì)更合理,功能豐富,使用更方便
- 都是不可變對(duì)象,修改后會(huì)返回新的時(shí)間對(duì)象,不會(huì)丟失最開(kāi)始的時(shí)間
- 線(xiàn)程安全
- 能精確到毫秒、納秒
LocalDate、LocalTime、LocalDateTime
- LocalDate:代表本地日期(年、月、日、星期)
- LocalTime:代表本地時(shí)間(時(shí)、分、秒、納秒)
- LocalDateTime:代表本地日期、時(shí)間(年、月、日、星期、時(shí)、分、秒、納秒)
// LocalDateimport java.time.LocalDate;public class Test {public static void main(String[] args) {// 1. 獲取本地日期對(duì)象(不可變對(duì)象)LocalDate date = LocalDate.now();System.out.println(date); // 2023-11-24// 2. 獲取日期對(duì)象中的信息int year = date.getYear();int month = date.getMonthValue();int day = date.getDayOfMonth();int dayOfYear = date.getDayOfYear(); // 一年365天中的第幾天int dayOfWeek = date.getDayOfWeek().getValue(); // 星期幾// 3. 修改信息(本質(zhì)不是修改原來(lái)的,而是新建了一個(gè)對(duì)象)LocalDate newDate = date.withYear(2050);System.out.println(date); // 2023-11-24System.out.println(newDate); // 2050-11-24// 4. 把某個(gè)信息加(或者減)多少(本質(zhì)不是修改原來(lái)的,而是新建了一個(gè)對(duì)象)LocalDate date1 = date.plusYears(10);LocalDate date2 = date.minusYears(10);// 5. 指定日期的LocalDate對(duì)象LocalDate date3 = LocalDate.of(2035, 10, 1);// 6. 判斷2個(gè)日期對(duì)象,是否相等,在前還是在后System.out.println(date1.equals(date2)); // falseSystem.out.println(date1.isAfter(date2)); // trueSystem.out.println(date1.isBefore(date2)); // false}
}
// LocalTimeimport java.time.LocalTime;public class Test {public static void main(String[] args) {// 1. 獲取本地時(shí)間對(duì)象(不可變對(duì)象)LocalTime time = LocalTime.now();System.out.println(time); // 23:56:28.720309500// 2. 獲取時(shí)間對(duì)象中的信息int hour = time.getHour();int minute = time.getMinute();int second = time.getSecond();int nano = time.getNano(); // 納秒// 3. 修改信息(本質(zhì)不是修改原來(lái)的,而是新建了一個(gè)對(duì)象)LocalTime time1 = time.withHour(8);// 4. 把某個(gè)信息加(或者減)多少(本質(zhì)不是修改原來(lái)的,而是新建了一個(gè)對(duì)象)LocalTime time2 = time.plusHours(8);LocalTime time3 = time.minusHours(8);// 5. 指定時(shí)間的LocalTime對(duì)象LocalTime time4 = LocalTime.of(12, 15);// 6. 判斷2個(gè)時(shí)間對(duì)象,是否相等,在前還是在后System.out.println(time1.equals(time2));System.out.println(time1.isAfter(time2));System.out.println(time1.isBefore(time2));}
}
// LocalDateTimeimport java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Test {public static void main(String[] args) {LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime); // 2023-11-25T10:08:23.410530300// 1. 可以獲取日期和時(shí)間的全部信息int year = dateTime.getYear();int month = dateTime.getMonthValue();int day = dateTime.getDayOfMonth();int dayOfYear = dateTime.getDayOfYear();int dayOfWeek = dateTime.getDayOfWeek().getValue();int hour = dateTime.getHour();int minute = dateTime.getMinute();int second = dateTime.getSecond();int nano = dateTime.getNano();// 2. 修改時(shí)間LocalDateTime dateTime1 = dateTime.withYear(2035);// 3. 加減LocalDateTime dateTime2 = dateTime.plusYears(5);LocalDateTime dateTime3 = dateTime.minusYears(5);// 4. 獲取指定日期和時(shí)間的LocalDateTime對(duì)象LocalDateTime dateTime4 = LocalDateTime.of(2055, 6, 1, 12, 30, 15, 3000);System.out.println(dateTime4); // 2055-06-01T12:30:15.000003// 5. 判斷日期時(shí)間對(duì)象是否相等,在前還是在后System.out.println(dateTime1.equals(dateTime2));System.out.println(dateTime1.isAfter(dateTime2));System.out.println(dateTime1.isBefore(dateTime2));// 6. 可以把LocalDateTime對(duì)象,轉(zhuǎn)為L(zhǎng)ocalDate和LocalTimeLocalDate date = dateTime.toLocalDate();LocalTime time = dateTime.toLocalTime();System.out.println(date); // 2023-11-25System.out.println(time); // 10:20:04.680774700}
}
時(shí)區(qū)
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;public class Test {public static void main(String[] args) {// 1. 獲取系統(tǒng)默認(rèn)的時(shí)區(qū)ZoneId obj = ZoneId.systemDefault();System.out.println(obj); // GMT+08:00System.out.println(obj.getId()); // GMT+08:00// 2. 顯示 Java 支持的全部時(shí)區(qū) IdSystem.out.println(ZoneId.getAvailableZoneIds()); // [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi......]// 3. 把某個(gè)時(shí)區(qū)的id封裝成ZoneId對(duì)象ZoneId obj1 = ZoneId.of("America/Cuiaba");// 4. 獲取某個(gè)時(shí)區(qū)的ZonedDatetime對(duì)象ZonedDateTime obj2 = ZonedDateTime.now(obj1);System.out.println(obj2); // 輸出 America/Cuiaba 時(shí)區(qū)當(dāng)前的時(shí)間,如下所示// 2023-11-24T22:50:05.534176500-04:00[America/Cuiaba]// 5. 獲取世界標(biāo)準(zhǔn)時(shí)間ZonedDateTime obj3 = ZonedDateTime.now(Clock.systemUTC());System.out.println(obj3); // 2023-11-25T02:54:06.575812300Z// 6. 獲取系統(tǒng)默認(rèn)時(shí)區(qū)的ZonedDateTime對(duì)象ZonedDateTime obj4 = ZonedDateTime.now();System.out.println(obj4); // 2023-11-25T10:55:46.410093200+08:00[GMT+08:00]}
}
Instant (時(shí)刻/時(shí)間戳)
- 傳統(tǒng)的 Date 類(lèi)只能精確到毫秒,并且是可變對(duì)象
- 新增的 Instant 類(lèi)可以精確到納秒,并且是不可變對(duì)象(推薦使用 Instant 替代 Date )
import java.time.Instant;public class Test {public static void main(String[] args) {// 1. 創(chuàng)建 Instant 的對(duì)象,獲取此"刻"信息(該信息由兩部分組成:"總秒數(shù)" + "不夠1秒的納秒數(shù)")Instant obj = Instant.now();System.out.println(obj); // 2023-11-25T03:05:00.754167800Z// 2. 獲取總秒數(shù)long second = obj.getEpochSecond();System.out.println(second);// 3. 獲取納秒數(shù)int nano = obj.getNano();System.out.println(nano);// 4. 其他基本操作,類(lèi)比之前的方法,它們的方法有共通性,而且都是不可變對(duì)象Instant instant1 = Instant.now();Instant instant2 = Instant.now();System.out.println(instant1.equals(instant2)); // 判斷是否相等System.out.println(instant1.isAfter(instant2));System.out.println(instant1.isBefore(instant2));Instant instant3 = instant1.plusSeconds(5); // +5 秒Instant instant4 = instant1.minusSeconds(5); // -5 秒}
}
DateTimeFormatter (日期時(shí)間格式化器)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Test {public static void main(String[] args) {// 1. 創(chuàng)建一個(gè)日期時(shí)間格式化器對(duì)象DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");// 2. 對(duì)時(shí)間進(jìn)行格式化// 2.0 準(zhǔn)備一個(gè)時(shí)間LocalDateTime dateTime = LocalDateTime.now(); // 創(chuàng)建日期時(shí)間對(duì)象System.out.println(dateTime); // 輸出該對(duì)象 2023-11-25T11:24:22.524304100// 2.1 方法一String str1 = formatter.format(dateTime); // 格式化這個(gè)日期時(shí)間對(duì)象System.out.println(str1); // 輸出格式化后的結(jié)果 2023年11月25日 11:24:22// 2.2 方法二String str2 = dateTime.format(formatter);System.out.println(str2); // 2023年11月25日 11:24:22// 4. 解析時(shí)間:一般使用 LocalDateTime 提供的解析方法來(lái)解析String str = "2023年11月25日 11:25:25";LocalDateTime obj = LocalDateTime.parse(str, formatter);System.out.println(obj); // 2023-11-25T11:25:25}
}
Period(一段時(shí)期)
用于計(jì)算兩個(gè) LocalDate 對(duì)象相差的年數(shù)、月數(shù)、天數(shù)
import java.time.LocalDate;
import java.time.Period;public class Test {public static void main(String[] args) {LocalDate start = LocalDate.of(2030, 8, 6);LocalDate end = LocalDate.of(2030, 8, 20);// 1. 創(chuàng)建 Period 對(duì)象,封裝兩個(gè)日期對(duì)象Period obj = Period.between(start, end);// 2. 通過(guò) Period 對(duì)象獲取兩個(gè)日期對(duì)象相差的信息System.out.println(obj.getYears()); // 0System.out.println(obj.getMonths()); // 0System.out.println(obj.getDays()); // 14}
}
Duration(持續(xù)時(shí)間)
用于計(jì)算兩個(gè)時(shí)間對(duì)象相差的天數(shù)、小時(shí)數(shù)、分?jǐn)?shù)、秒數(shù)、納秒數(shù);支持 LocalTime、LocalDateTime、Instant 等時(shí)間
import java.time.Duration;
import java.time.LocalDateTime;public class Test {public static void main(String[] args) {LocalDateTime start = LocalDateTime.of(2028, 5, 10, 12, 15, 30);LocalDateTime end = LocalDateTime.of(2028, 5, 25, 8, 0, 0);// 1. 得到 Duration 對(duì)象Duration obj = Duration.between(start, end);// 2. 獲取兩個(gè)時(shí)間對(duì)象間隔的信息System.out.println(obj.toDays()); // 間隔多少天System.out.println(obj.toHours()); // 間隔多少小時(shí)System.out.println(obj.toMinutes()); // 間隔多少分System.out.println(obj.toSeconds()); // 間隔多少秒System.out.println(obj.toMillis()); // 間隔多少毫秒System.out.println(obj.toNanos()); // 間隔多少納秒}
}