เรียนรู้ และใช้งาน ThaiBuddhistDate บน Java

Sharing is caring!

การทำงานกับวันที่และเวลาเป็นส่วนสำคัญของการพัฒนาซอฟต์แวร์ เพื่อให้ได้ผลลัพธ์ที่ถูกต้องและเป็นเวลาจริง ใน 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 และเวอร์ชันต่อไป

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *