目? 錄
一、傳統 API
1.System.currentTimeMillis()
(1)說明
(2)實例
2.構造方法
(1)說明
(2)無參構造
(3)有參構造
3.日期格式化
(1)說明
(2)實例
4.日歷
(1)get() 與 getTime()
(2)set() 與 setTime()
二、全新 API
1.LocalDate、LocalTime、LocalDateTime
2.toEpochMilli 新時間戳
3.Duration 時間差
4.Period 日期差
5.TemporalAdjusters 時間矯正器
6.DateTimeFormatter 日期格式化
一、傳統 API
1.System.currentTimeMillis()
(1)說明
- 獲取自 1970年1月1日0時0分0秒到系統當前時間的總毫秒數;
- 1s (秒)?= 1000ms(毫秒);
- 1ms(毫秒)?= 1000μs(微秒);
- 1μs(微秒)?= 1000ns(納秒);
- 1ns (納秒)=?1000ps(皮秒)。
(2)實例
public class DateTest {public static void main(String[] args) {long time = System.currentTimeMillis();System.out.println(time); // 1740723807436}
}
2.構造方法
(1)說明
????????此處是 java.util.Date ,而?java.sql.Date 是?java.util.Date 的子類。
(2)無參構造
public class DateTest {public static void main(String[] args) {// 獲取當前時間Date d1 = new Date();System.out.println(d1); // Fri Feb 28 13:56:29 CST 2025}
}
(3)有參構造
public class DateTest {public static void main(String[] args) {// 獲取當前時間Date d1 = new Date(System.currentTimeMillis());System.out.println(d1); // Fri Feb 28 14:02:24 CST 2025// 獲取指定時間Date d2 = new Date(3000);System.out.println(d2); // Thu Jan 01 08:00:03 CST 1970}
}
3.日期格式化
(1)說明
- 需要使用 java.text.SimpleDateFormat 類,其父類是?DateFormat ;
- 日期和時間格式由日期和時間模式字符串指定,模式字母如下表所示。
符號 | 日期或時間組件 | 說明 | 例子 |
---|---|---|---|
G | 年號 | 文本 | AD |
y | 年 | 年 | 1996 ;?96 |
Y | 周 年 | 年 | 2009 ;?09 |
M | 一年中的月份(上下文相關) | 月 | July ;?Jul ;?07 |
L | 一年中的月份 (獨立形式) | 月 | July ;?Jul ;?07 |
w | 一年中的周 | 數 | 27 |
W | 每月的周 | 數 | 2 |
D | 一年中的天 | 數 | 189 |
d | 當月的日期 | 數 | 10 |
F | 當月中的星期幾 | 數 | 2 |
E | 星期名稱 | 文本 | Tuesday ;?Tue |
u | 星期數 (1 = 星期一,...,7 = 星期日) | 數 | 1 |
a | 上午/下午標記 | 文本 | PM |
H | 一天中的小時 (0-23) | 數 | 0 |
k | 一天中的小時 (1-24) | 數 | 24 |
K | 上午 / 下午 (0-11) 小時數 | 數 | 0 |
h | 上午 / 下午 (1-12) | 數 | 12 |
m | 分鐘(小時) | 數 | 30 |
s | 秒(分鐘) | 數 | 55 |
S | 毫秒 | 數 | 978 |
z | 時區 | 通用時區 | Pacific Standard Time ;?PST ;?GMT-08:00 |
Z | 時區 | RFC 822 時區 | -0800 |
X | 時區 | ISO 8601 時區 | -08 ;?-0800 ;?-08:00 |
(2)實例
public class DateTest {public static void main(String[] args) throws ParseException {Date d1 = new Date();System.out.println(d1); // Fri Feb 28 14:29:31 CST 2025SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String format = sdf.format(d1);System.out.println(format); // 2025年02月28日 14:29:31String time = "2000年06月16日 08:08:08";Date d2 = sdf.parse(time);System.out.println(d2); // Fri Jun 16 08:08:08 CST 2000}
}
4.日歷
(1)get() 與 getTime()
public class DateTest {public static void main(String[] args) {Calendar calendar = Calendar.getInstance(); // 獲取當前時間的日歷對象,調用一個靜態方法System.out.println(calendar.getTime()); // 獲取當前時間System.out.println(calendar.get(Calendar.YEAR)); // 獲取年份System.out.println(calendar.get(Calendar.MONTH) + 1); // 獲取月份,從0開始,需要加1System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); // 獲取本月的第幾天System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); // 獲取星期,從1開始,1表示星期天System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); // 獲取本年的第幾天System.out.println(calendar.get(Calendar.HOUR)); // 獲取小時,12小時制System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); // 獲取小時,24小時制System.out.println(calendar.get(Calendar.MINUTE)); // 獲取分鐘System.out.println(calendar.get(Calendar.SECOND)); // 獲取秒System.out.println(calendar.get(Calendar.MILLISECOND)); // 獲取毫秒}
}
(2)set() 與 setTime()
public class DateTest {public static void main(String[] args) throws ParseException {/*** set()*/Calendar calendar = Calendar.getInstance(); // 獲取當前時間的日歷對象calendar.set(Calendar.YEAR, 1945);calendar.set(Calendar.MONTH, Calendar.SEPTEMBER);calendar.set(Calendar.DAY_OF_MONTH, 15);System.out.println("日本無條件投降:" + calendar.get(Calendar.YEAR) + "年" + calendar.get(Calendar.MONTH) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日"); // 日本無條件投降:1945年8月15日calendar.set(2020, Calendar.JANUARY, 1, 8, 8, 8);System.out.println(calendar.getTime()); // Wed Jan 01 08:08:08 CST 2020/*** setTime()*/String time = "2022-02-24";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(time);calendar.setTime(date);System.out.println(calendar.getTime()); // Thu Feb 24 00:00:00 CST 2022}
}
二、全新 API
? ? ? ? 由于傳統 API 存在線程安全問題,jdk 8 提供了一套全新 API ,在 java.time 包下。
1.LocalDate、LocalTime、LocalDateTime
public class DateTest {public static void main(String[] args) throws ParseException {System.out.println("【獲取系統當前日期時間】");System.out.println(LocalDate.now()); // 2025-02-28System.out.println(LocalTime.now()); // 17:19:21.671997600System.out.println(LocalDateTime.now()); // 2025-02-28T17:19:21 .671997600System.out.println("==================================");System.out.println("【獲取指定日期時間】");System.out.println(LocalDate.of(2000, 1, 1));System.out.println(LocalTime.of(8, 16, 26, 36));System.out.println("==================================");System.out.println("【加日期時間】");System.out.println(LocalDateTime.now().plusYears(3).plusMonths(3).plusDays(1));System.out.println("==================================");System.out.println("【減日期時間】");System.out.println(LocalDateTime.now().minusYears(3).minusMonths(3).minusDays(1));}
}
2.toEpochMilli 新時間戳
public class DateTest {public static void main(String[] args) throws ParseException {// UTC 時間戳Instant now = Instant.now();System.out.println(now); // 2025-02-28T10:38:03.122192700ZSystem.out.println("時間戳:" + now.toEpochMilli()); // 時間戳:1740739083122}
}
3.Duration 時間差
public class DateTest {public static void main(String[] args) throws ParseException {LocalDateTime ldt1 = LocalDateTime.of(2019, 12, 12, 0, 0, 0);LocalDateTime ldt2 = LocalDateTime.now();Duration between = Duration.between(ldt1, ldt2);System.out.println("距離新冠肺炎爆發已經:" + between.toDays() + "天"); // 距離新冠肺炎爆發已經:1905天System.out.println("距離新冠肺炎爆發已經:" + between.toHours() + "小時"); // 距離新冠肺炎爆發已經:45738小時System.out.println("距離新冠肺炎爆發已經:" + between.toMinutes() + "分鐘"); // 距離新冠肺炎爆發已經:2744326分鐘System.out.println("距離新冠肺炎爆發已經:" + between.toMillis() + "毫秒"); // 距離新冠肺炎爆發已經:164659582897毫秒}
}
4.Period 日期差
public class DateTest {public static void main(String[] args) throws ParseException {LocalDate ld1 = LocalDate.of(2019, 12, 12);LocalDate ld2 = LocalDate.now();Period between = Period.between(ld1, ld2);System.out.println("距離新冠病毒爆發已經過去:" + between.getYears() + "年" + between.getMonths() + "月" + between.getDays() + "天"); // 距離新冠病毒爆發已經過去:5年2月16天}
}
5.TemporalAdjusters 時間矯正器
public class DateTest {public static void main(String[] args) throws ParseException {LocalDateTime ldt = LocalDateTime.now();System.out.println(ldt); // 2025-02-28T20:25:50.585827System.out.println(ldt.with(TemporalAdjusters.firstDayOfYear())); // 2025-01-01T20:25:50.585827System.out.println(ldt.with(TemporalAdjusters.lastDayOfYear())); // 2025-12-31T20:25:50.585827System.out.println(ldt.with(TemporalAdjusters.firstDayOfMonth())); // 2025-02-01T20:25:50.585827System.out.println(ldt.with(TemporalAdjusters.lastDayOfMonth())); // 2025-02-28T20:25:50.585827System.out.println(ldt.with(TemporalAdjusters.next(DayOfWeek.MONDAY))); // 2025-03-03T20:25:50.585827}
}
6.DateTimeFormatter 日期格式化
public class DateTest {public static void main(String[] args) throws ParseException {LocalDateTime ldt = LocalDateTime.now();DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");System.out.println(dtf.format(ldt)); // 2025年02月28日 20:33:55LocalDateTime ldt1 = LocalDateTime.parse("2020年01月01日 08:08:08", dtf);System.out.println(ldt1); // 2020-01-01T08:08:08}
}