การทำงานกับวันที่และเวลาเป็นส่วนสำคัญของการพัฒนาซอฟต์แวร์ เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและเป็นเวลาจริง ใน Java มีไลบรารี Java ที่ชื่อว่า “java.time” ซึ่งมีคลาสที่ชื่อว่า “ThaiBuddhistDate” ที่ใช้สำหรับการจัดการวันที่และเวลาในปฏิทินพุทธศักราช
ในตัวอย่างนี้ ฉันจะแสดงให้เห็นถึงวิธีการใช้งาน ThaiBuddhistDate ใน Java โดยเริ่มต้นจากการ import คลาส:
import java.time.LocalDate;
import java.time.chrono.ThaiBuddhistDate;
import java.time.format.DateTimeFormatter;
จากนั้น สามารถใช้คลาส “ThaiBuddhistDate” เพื่อสร้างวันที่และเวลาของปฏิทินพุทธศักราช ดังนี้:
// ใช้ LocalDate เพื่อกำหนดวันที่ในปฏิทิน Gregorian
LocalDate gregorianDate = LocalDate.of(2023, 3, 27);
// สร้าง ThaiBuddhistDate จาก LocalDate
ThaiBuddhistDate thaiDate = ThaiBuddhistDate.from(gregorianDate);
โดย “LocalDate” ใช้สำหรับการกำหนดวันที่ในปฏิทิน Gregorian ซึ่งจะถูกแปลงเป็นวันที่ในปฏิทินพุทธศักราชด้วยคลาส “ThaiBuddhistDate.from()”
หลังจากนั้น สามารถทำการแสดงผลวันที่ในรูปแบบที่ต้องการโดยใช้ DateTimeFormatter เช่น:
// กำหนดรูปแบบวันที่และเวลาในประเทศไทย
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", new Locale("th", "TH
การแปลงจากวันที่ในปฏิทินพุทธศักราชเป็นวันที่ในปฏิทิน Gregorian
// สร้าง ThaiBuddhistDate
ThaiBuddhistDate thaiDate = ThaiBuddhistDate.of(2566, 3, 27);
// แปลงเป็น LocalDate ในปฏิทิน Gregorian
LocalDate gregorianDate = thaiDate.toGregorian();
การคำนวณวันที่โดยใช้ระยะเวลา
// สร้างวันที่เริ่มต้น
ThaiBuddhistDate startDate = ThaiBuddhistDate.of(2566, 3, 27);
// สร้างระยะเวลา 30 วัน
Period period = Period.ofDays(30);
// คำนวณวันที่หลังจาก 30 วัน
ThaiBuddhistDate endDate = startDate.plus(period);
การเปรียบเทียบวันที่
// สร้าง ThaiBuddhistDate
ThaiBuddhistDate date1 = ThaiBuddhistDate.of(2566, 3, 27);
ThaiBuddhistDate date2 = ThaiBuddhistDate.of(2566, 3, 28);
// เปรียบเทียบว่า date1 มากกว่า date2 หรือไม่
boolean isAfter = date1.isAfter(date2);
// เปรียบเทียบว่า date1 เท่ากับ date2 หรือไม่
boolean isEqual = date1.isEqual(date2);
// เปรียบเทียบว่า date1 น้อยกว่า date2 หรือไม่
boolean isBefore = date1.isBefore(date2);
การรู้จำหน้าวันสำคัญ
// สร้าง ThaiBuddhistDate
ThaiBuddhistDate thaiDate = ThaiBuddhistDate.of(2566, 3, 27);
// ตรวจสอบว่าวันนี้เป็นวันอะไร
ThaiBuddhistChronology chronology = ThaiBuddhistChronology.INSTANCE;
ThaiBuddhistEra thaiEra = chronology.eraOf(1);
String thaiEraName = thaiEra.getDisplayName(TextStyle.FULL, new Locale("th", "TH"));
String thaiDayOfWeek = thaiDate.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("th", "TH"));
String thaiMonth = thaiDate.getMonth().getDisplayName(TextStyle.FULL, new Locale("th", "TH"));
การแสดงผลวันที่ในรูปแบบที่กำหนดเอง
// สร้าง ThaiBuddhistDate
ThaiBuddhistDate thaiDate = ThaiBuddhistDate.of(2566, 3, 27);
// แสดงวันที่ในรูปแบบที่กำหนดเอง
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = thaiDate.format(formatter);
System.out.println(formattedDate); // 27/03/2566
การดึงข้อมูลจากฐานข้อมูลและแปลงเป็น ThaiBuddhistDate
// สร้าง Connection ไปยังฐานข้อมูล
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
// สร้าง Statement และ Query ข้อมูล
Statement statement = connection.createStatement();
String query = "SELECT birthdate FROM users WHERE id = 1";
// ดึงข้อมูลจากฐานข้อมูล
ResultSet resultSet = statement.executeQuery(query);
if (resultSet.next()) {
// แปลงข้อมูลเป็น LocalDate ก่อน
LocalDate localDate = resultSet.getDate("birthdate").toLocalDate();
// แปลง LocalDate เป็น ThaiBuddhistDate
ThaiBuddhistChronology chronology = ThaiBuddhistChronology.INSTANCE;
ThaiBuddhistDate thaiDate = chronology.date(localDate);
System.out.println(thaiDate); // พิมพ์วันที่ในฟอร์แมตของปฏิทิน ThaiBuddhist
}
// ปิดการเชื่อมต่อกับฐานข้อมูล
resultSet.close();
statement.close();
connection.close();
การคำนวณวันอายุ
// สร้าง ThaiBuddhistDate ของวันเกิด
ThaiBuddhistDate birthDate = ThaiBuddhistDate.of(2545, 3, 27);
// คำนวณวันอายุ
LocalDate today = LocalDate.now();
LocalDate localBirthDate = birthDate.toGregorian();
Period age = Period.between(localBirthDate, today);
System.out.println(age.getYears() + " ปี " + age.getMonths() + " เดือน " + age.getDays() + " วัน");
การคำนวณจำนวนวันระหว่างวันที่
// สร้าง ThaiBuddistDate สำหรับวันที่เริ่มต้นและวันที่สิ้นสุด
ThaiBuddhistDate startDate = ThaiBuddhistDate.of(2566, 3, 1);
ThaiBuddhistDate endDate = ThaiBuddhistDate.of(2566, 3, 27);
// แปลงเป็น LocalDate ก่อน
LocalDate localStartDate = startDate.toGregorian();
LocalDate localEndDate = endDate.toGregorian();
// คำนวณจำนวนวันระหว่างวันที่
long daysBetween = ChronoUnit.DAYS.between(localStartDate, localEndDate);
System.out.println("จำนวนวันระหว่างวันที่ " + startDate + " และวันที่ " + endDate + " คือ " + daysBetween + " วัน");
การเปรียบเทียบวันที่
// สร้าง ThaiBuddhistDate สำหรับวันเกิด
ThaiBuddhistDate birthDate = ThaiBuddhistDate.of(2545, 3, 27);
// สร้าง ThaiBuddhistDate สำหรับวันปัจจุบัน
ThaiBuddhistDate todayDate = ThaiBuddhistDate.now();
// เปรียบเทียบว่าวันปัจจุบันมากกว่าหรือน้อยกว่าวันเกิด
if (todayDate.isAfter(birthDate)) {
System.out.println("วันปัจจุบันมากกว่าวันเกิด");
} else if (todayDate.isBefore(birthDate)) {
System.out.println("วันปัจจุบันน้อยกว่าวันเกิด");
} else {
System.out.println("วันปัจจุบันเท่ากับวันเกิด");
}
โดยทั่วไปแล้วการพัฒนาระบบที่เกี่ยวกับเรื่อง ThaiBuddhistDate จะมีการใช้งานหลักๆ คือการแปลงรูปแบบวันที่ให้เป็นปฏิทิน ThaiBuddhist และการคำนวณวันที่ในรูปแบบของปฏิทินนี้ นอกจากนี้ยังมีการเปรียบเทียบวันที่ การคำนวณอายุ และการคำนวณจำนวนวันระหว่างวันที่ เป็นต้น ซึ่งทั้งหมดนี้สามารถทำได้ง่ายๆ ด้วยคลาส ThaiBuddhistDate และ ThaiBuddhistChronology ใน Java 8 และเวอร์ชันต่อไป