1. คลาส DateTimeFormatter

คลาส พิเศษDateTimeFormatterพบทางเข้าสู่ Date Time API จุดประสงค์คือทำให้โปรแกรมเมอร์แปลงวันที่และเวลาเป็นรูปแบบที่ต้องการได้ง่ายที่สุด และเรายินดีที่จะรายงานว่าผู้สร้างของ Java ประสบความสำเร็จ

ใช้งานง่ายมาก ขั้นแรก คุณต้องสร้างDateTimeFormatterคลาสและส่งผ่านรูปแบบที่ระบุวิธีการแสดงวันที่และเวลา:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

ตัวแปรdtfอยู่ที่ไหน เป็นเมธอดคงที่ของคลาส และรูปแบบคือสตริงที่ระบุรูปแบบที่จะใช้แสดงวันที่และเวลาDateTimeFormatterDateTimeFormatter.ofPattern()DateTimeFormatter

ตัวอย่าง

รหัส เอาต์พุตคอนโซล
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

ในตัวอย่างข้างต้น เราใช้ofPattern()วิธีการสร้างDateTimeFormatterวัตถุตามรูปแบบ และในบรรทัดถัดไป เราใช้format()วิธีการแปลงLocalDateTimeวัตถุเป็นสตริง คุณเห็นผลลัพธ์บนหน้าจอ

คุณสามารถส่งวัตถุเกือบทุกชนิดจาก Date Time API ไปยังformat()เมธอดได้

สแตติกofPattern()นั้นง่ายมาก: ใช้รูปแบบเป็นอาร์กิวเมนต์และส่งกลับDateTimeFormatterวัตถุ ส่วนที่น่าสนใจที่สุดคือรูปแบบ


2. รูปแบบการจัดรูปแบบ

สตริงที่ส่งผ่านเป็นรูปแบบจะใช้เป็นรูปแบบเมื่อแสดงข้อมูล MMจะถูกแทนที่ด้วยตัวเลขของเดือนddตามวันของเดือน และyyด้วยตัวเลขของปี กรณีของตัวอักษรมีความสำคัญ

ตารางแบบเต็มสำหรับรูปแบบเวลาเหล่านี้คือ:

จดหมาย ความหมาย
ปี
เดือน
วัน
ชม ชั่วโมง
นาที
วินาที
หนึ่งในพันของวินาที
นาโนวินาที

จำไม่ยากเป็นพิเศษ

แต่ทำไมรูปแบบในตัวอย่างถึงมีตัวอักษรซ้ำกัน MM, dd และ yy? นี่คือจุดที่น่าสนใจมากขึ้น

ความคิดทั่วไป

จำนวนตัวอักษรมีผลต่อความยาวของข้อความ ยิ่งมีตัวอักษรมากข้อความก็จะยาวขึ้น

หากระบุตัวอักษร H เพียงครั้งเดียว 9 ชั่วโมงจะแสดงเป็น 9 แต่ถ้าระบุตัวอักษร H สองครั้งติดต่อกัน 9 ชั่วโมงจะแสดงเป็น 09

หากระบุตัวอักษร y 2 ครั้งติดต่อกัน ปีจะถูกเขียนโดยใช้ตัวเลข 2 หลัก หากเกิดขึ้น 4 ครั้งติดต่อกัน ก็จะใช้ตัวเลข 4 หลัก

หากระบุตัวอักษร M 2 ครั้งติดต่อกัน จำนวนเดือนจะถูกเขียน หาก 3 ครั้งติดต่อกัน จะใช้ชื่อเดือน (ตัวอักษร 3 ตัวแรก) ถ้า 4 ครั้งติดต่อกัน จะใช้ชื่อเต็มของเดือน

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. กรอกตารางรูปแบบ

ตารางเต็มมีขนาดค่อนข้างใหญ่และน่าสนใจมาก:

ลวดลาย รูปแบบของรูปแบบ ตัวอย่าง คำอธิบาย
ปปปปปป 19; 2019 ปี
เอ็ม/แอล มมมมมมมมมมมมมมมมม 1; 01; ม.ค; มกราคม; เจ เดือน
ง, วว 9; 09 วัน
ชม ฮ, ฮ 2; 02 ชั่วโมง
เมตร, มม 3; 03 นาที
เอส, เอสเอส 5; 05 วินาที
ส,ส,ส,ส,... 1; 12; 123 หนึ่งในพันของวินาที
123456789 นาโนวินาที
จี GGGG GGGGG ค.ศ. ; อันโน โดมินี่; ก; ยุค
ถาม/ถาม คิว คิวคิว คิวคิว คิวคิวคิว 3; 03; ไตรมาสที่ 3; ไตรมาสที่ 3 หนึ่งในสี่
13 สัปดาห์แห่งปี
3 สัปดาห์ของเดือน
อี อีอีอีอีอีอีอีอีอีอีอีอีอีอีอีอี จันทร์ ; วันจันทร์; ม วันของสัปดาห์
จ/ค อี อี อี อี อี อี อี อี อี 1; 01; จันทร์ ; วันจันทร์; ม วันของสัปดาห์
น. หรือ น
ชม. ชม. 12 นาฬิกา 12 ชั่วโมง
วี วี.วี ยุโรป/เฮลซิงกิ เขตเวลา
ซี zzzzz EET; เวลามาตรฐานยุโรปตะวันออก เขตเวลา
OOOOO จีเอ็มที+2; GMT+02:00 เขตเวลา

อย่างไรก็ตาม นี่ไม่ใช่เวอร์ชันสมบูรณ์จริงๆ คุณสามารถค้นหาเวอร์ชันที่สมบูรณ์ที่สุดได้ที่นี่



4. แยกเวลา

คลาส นี้DateTimeFormatterยังน่าสนใจสำหรับความสามารถที่ไม่เพียงแต่แปลงวันที่และเวลาเป็นสตริงตามรูปแบบที่กำหนดเท่านั้น แต่ยังสามารถดำเนินการย้อนกลับได้อีกด้วย!

การแยกวิเคราะห์สตริงคือกระบวนการแยกสตริงออกเป็นโทเค็นที่มีความหมาย

นี่คือสิ่งที่ดูเหมือน:

รหัส เอาต์พุตคอนโซล
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

ขั้นแรก เราสร้างDateTimeFormatterวัตถุและตั้งค่ารูปแบบที่ใช้สำหรับการแยกวิเคราะห์

จากนั้นเราจะเรียกLocalDate.parse()หรือLocalTime.parse()หรือLocalDateTime.parse()เมธอดและส่งผ่านสตริงเพื่อแยกวิเคราะห์พร้อมกับDateTimeFormatterวัตถุ ซึ่งเข้าใจวิธีการแยกวิเคราะห์ข้อความที่ส่งผ่านและรูปแบบใดที่ควรใช้ในการทำ

อีกตัวอย่างหนึ่ง: คราวนี้เราจะแยกวิเคราะห์เวลา

รหัส เอาต์พุตคอนโซล
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59