Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีตรวจสอบปีอธิกสุรทิน (Leap Year) ใน Android ด้วย Year API

บทนำ: 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)

  1. หาร 4 ลงตัว → ปีอธิกสุรทิน
  2. แต่ หาร 100 ลงตัว → ไม่ใช่ ปีอธิกสุรทิน
  3. ยกเว้น หาร 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 (เหมือนตัวอย่างก่อนหน้า)