1. Lớp DateTimeFormatter

Lớp đặc biệt DateTimeFormattertìm đường vào API Ngày Giờ. Mục đích của nó là giúp các lập trình viên dễ dàng chuyển đổi ngày và giờ thành định dạng chính xác mà họ muốn. Và chúng tôi vui mừng thông báo rằng những người tạo ra Java đã thành công.

Sử dụng nó rất dễ dàng. Trước tiên, bạn cần tạo một DateTimeFormatterlớp và chuyển vào một mẫu xác định cách nó sẽ hiển thị ngày và giờ:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Đâu dtflà một DateTimeFormatterbiến. là một phương thức tĩnh của lớp. Và mẫu là một chuỗi chỉ định mẫu sẽ được sử dụng để hiển thị ngày và giờ.DateTimeFormatter.ofPattern()DateTimeFormatter

ví dụ

Mã số Đầu ra bảng điều khiển
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

Trong ví dụ trên, chúng ta sử dụng ofPattern()phương thức để tạo một DateTimeFormatterđối tượng dựa trên mẫu. Và trong dòng tiếp theo, chúng ta sử dụng format()phương thức để chuyển đổi một LocalDateTimeđối tượng thành một chuỗi. Bạn thấy kết quả trên màn hình.

Bạn có thể chuyển hầu hết mọi đối tượng từ API Thời gian Ngày sang format()phương thức.

Tĩnh ofPattern()cũng rất đơn giản: nó lấy một mẫu làm đối số và trả về một DateTimeFormatterđối tượng. Phần thú vị nhất được tìm thấy trong mô hình.


2. Định dạng mẫu

Chuỗi được truyền dưới dạng mẫu được sử dụng làm mẫu khi hiển thị thông tin. MM được thay thế bằng số tháng, dd bằng ngày trong tháng và yy bằng số của năm. Trường hợp của các chữ cái quan trọng.

Bảng đầy đủ cho các mẫu thời gian này là:

Thư Nghĩa
y Năm
m Tháng
đ Ngày
h Giờ
tôi Phút
S giây
S Một phần nghìn giây
N Nano giây.

Đặc biệt không khó nhớ.

Nhưng tại sao mẫu trong ví dụ bao gồm các chữ cái lặp lại MM, dd và yy? Vâng, đây là nơi nó trở nên thú vị hơn.

Ý tưởng chung

Số lượng chữ cái ảnh hưởng đến độ dài của văn bản. Càng nhiều chữ cái, văn bản sẽ càng dài.

Nếu chữ H được chỉ định một lần, thì 9 giờ sẽ được hiển thị là 9, nhưng nếu chữ H được chỉ định hai lần liên tiếp, thì 9 giờ sẽ được hiển thị là 09.

Nếu chữ y được chỉ định 2 lần liên tiếp, thì năm được viết bằng 2 chữ số. Nếu nó xảy ra 4 lần liên tiếp, thì 4 chữ số được sử dụng.

Nếu chữ M được chỉ định 2 lần liên tiếp, thì số tháng được viết. Nếu 3 lần liên tiếp, thì tên của tháng (3 chữ cái đầu tiên) được sử dụng. Nếu 4 lần liên tiếp thì dùng tên đầy đủ của tháng.

Ví dụ:

Mã số Đầu ra bảng điều khiển
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Bảng mẫu hoàn chỉnh

Toàn bộ bảng khá lớn và siêu thú vị:

Mẫu Các biến thể của mô hình Ví dụ Sự miêu tả
y yy, yyyy 19; 2019 Năm
M/L M, MM, MM, MMMM, MMMMMM 1; 01; Tháng một; Tháng Giêng; J Tháng
đ đ, đ 9; 09 Ngày
h H, H 2; 02 Giờ
tôi m, mm 3; 03 Phút
S s, ss 5; 05 giây
S S, SS, SS, ... 1; 12; 123 Một phần nghìn giây
N N 123456789 Nano giây
g G, GGGG, GGGGG QUẢNG CÁO; Sau Công Nguyên; MỘT; Kỷ nguyên
hỏi đáp q, qq, qqq, qqqq 3; 03; Q3; quý 3 Một phần tư
w w 13 Tuần của năm
W W 3 tuần của tháng
e EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE Thứ hai; Thứ hai; m Ngày trong tuần
đ/c e, e, eee, eeeee, eeeee 1; 01; Thứ hai; Thứ hai; m Ngày trong tuần
Một Một BUỔI CHIỀU sáng hoặc chiều
h h 12 Đồng hồ 12 giờ.
V VV Châu Âu/Helsinki Múi giờ
z z zzzz EET; Giờ chuẩn Đông Âu Múi giờ
Ô Ơ OOOO GMT+2; GMT+02:00 Múi giờ

Nhân tiện, đây không thực sự là một phiên bản hoàn chỉnh. Bạn có thể tìm thấy phiên bản đầy đủ nhất tại đây .



4. Thời gian phân tích cú pháp

Lớp này DateTimeFormattercũng rất thú vị vì khả năng không chỉ chuyển đổi ngày và giờ thành một chuỗi theo một mẫu nhất định mà còn thực hiện thao tác ngược lại!

Phân tích cú pháp một chuỗi là quá trình tách nó thành các mã thông báo có ý nghĩa.

Đây là những gì nó trông giống như:

Mã số Đầu ra bảng điều khiển
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Đầu tiên, chúng tôi tạo một DateTimeFormatterđối tượng và đặt mẫu được sử dụng để phân tích cú pháp.

Sau đó, chúng tôi gọi phương thức LocalDate.parse()hoặc LocalTime.parse()hoặc LocalDateTime.parse()và chuyển vào chuỗi để được phân tích cú pháp cùng với DateTimeFormatterđối tượng, hiểu cách phân tích cú pháp văn bản đã truyền và mẫu nào sẽ được sử dụng để thực hiện điều đó.

Một ví dụ khác: lần này chúng ta sẽ phân tích thời gian.

Mã số Đầu ra bảng điều khiển
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59