บทนำ: java.time.Year ใน Android
Year คลาสใน Java 8 Time API (API 26+) แสดงปีเพียงอย่างเดียว มีเมธอด isLeap() ตรวจสอบปีอธิกสุรทินได้โดยตรง
ตัวอย่าง: ตรวจสอบปีปัจจุบันเป็นปีอธิกสุรทินหรือไม่
ขั้นตอนที่ 1-2: โปรเจกต์และ Layout
TextView ใน ConstraintLayout จัดกึ่งกลาง
ขั้นตอนที่ 3: MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.time.Year;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.dateTextView);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
Year year = Year.now();
boolean isLeap = year.isLeap();
String result = year + (isLeap ? " เป็นปีอธิกสุรทิน (Leap Year)"
: " ไม่ใช่ปีอธิกสุรทิน (Not Leap Year)");
textView.setText(result);
// เพิ่มข้อมูล: ปีอธิกสุรทินใกล้เคียง
Year prevLeap = year.minusYears(1);
while (!prevLeap.isLeap()) prevLeap = prevLeap.minusYears(1);
Year nextLeap = year.plusYears(1);
while (!nextLeap.isLeap()) nextLeap = nextLeap.plusYears(1);
textView.append("\nปีอธิกสุรทินก่อนหน้า: " + prevLeap);
textView.append("\nปีอธิกสุรทินถัดไป: " + nextLeap);
} else {
textView.setText("ต้องการ Android 8.0 (API 26) ขึ้นไป");
}
}
}
กฎปีอธิกสุรทิน (Gregorian Calendar)
- หาร 4 ลงตัว → ปีอธิกสุรทิน
- แต่ หาร 100 ลงตัว → ไม่ใช่ ปีอธิกสุรทิน
- ยกเว้น หาร 400 ลงตัว → เป็น ปีอธิกสุรทิน
ตัวอย่าง: 2000 เป็นปีอธิกสุรทิน (หาร 400 ลงตัว) แต่ 1900 ไม่ใช่ (หาร 100 ลงตัวแต่ไม่ใช่ 400)
Year API เมธอดสำคัญ
| เมธอด | คำอธิบาย |
|---|---|
now() | ปีปัจจุบันจาก System Clock |
of(int year) | สร้าง Year จากค่าปี |
isLeap() | ตรวจสอบปีอธิกสุรทิน (boolean) |
length() | จำนวนวันในปี (365 หรือ 366) |
plusYears(n) / minusYears(n) | บวก/ลบ ปี |
atDay(int dayOfYear) | แปลงเป็น LocalDate (วันในปี) |
atMonth(Month month) | แปลงเป็น YearMonth |
การใช้งานกับปีเฉพาะ
// ตรวจสอบปี 2024
Year year2024 = Year.of(2024);
boolean leap2024 = year2024.isLeap(); // true
// หาวันที่ 29 กุมภาพันธ์ มีอยู่หรือไม่
if (year.isLeap()) {
LocalDate feb29 = year.atMonth(Month.FEBRUARY).atEndOfMonth(); // 2024-02-29
}
ผลลัพธ์ (ตัวอย่าง ปี 2024)
2024 เป็นปีอธิกสุรทิน (Leap Year) ปีอธิกสุรทินก่อนหน้า: 2020 ปีอธิกสุรทินถัดไป: 2028
การรองรับ API < 26
ใช้ coreLibraryDesugaring ใน build.gradle (เหมือนตัวอย่างก่อนหน้า)