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

วิธีคำนวณความแตกต่างระหว่างสองวันที่ใน Android

ภาพรวม

ตัวอย่างนี้แสดงวิธีคำนวณจำนวนวันที่แตกต่างระหว่างสองวันที่ (Date) ใน Android โดยใช้ SimpleDateFormat และการคำนวณมิลลิวินาที

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: จัดทำ Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:textSize="16sp"
        android:textStyle="bold|italic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>
</RelativeLayout>

ขั้นตอนที่ 3: เขียนโค้ด MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);

        try {
            String currentDate = "09/24/2018";
            String finalDate = "09/26/2019";
            
            SimpleDateFormat dates = new SimpleDateFormat("MM/dd/yyyy");
            Date date1 = dates.parse(currentDate);
            Date date2 = dates.parse(finalDate);
            
            long difference = Math.abs(date1.getTime() - date2.getTime());
            long differenceDays = difference / (24 * 60 * 60 * 1000);
            
            textView.setText("ความแตกต่างระหว่างสองวันที่คือ " + differenceDays + " วัน");
        } catch (Exception exception) {
            Toast.makeText(this, "ไม่สามารถคำนวณความแตกต่างได้", Toast.LENGTH_SHORT).show();
        }
    }
}

หลักการคำนวณ

  1. แปลงสตริงวันที่เป็น Date object ด้วย SimpleDateFormat
  2. ใช้ getTime() ได้มิลลิวินาทีจาก Epoch (1970-01-01)
  3. ลบกัน แล้วใช้ Math.abs() เพื่อค่าสัมบูรณ์
  4. หารด้วยมิลลิวินาทีต่อวัน (24×60×60×1000 = 86,400,000)

วิธีใหม่แนะนำ (API 26+): ใช้ java.time

// ใช้ LocalDate และ ChronoUnit (ทันสมัย กระชับ ไม่ต้องคำนวณมิลลิวินาที)
LocalDate date1 = LocalDate.parse("2018-09-24", DateTimeFormatter.ofPattern("MM/dd/yyyy"));
LocalDate date2 = LocalDate.parse("2019-09-26", DateTimeFormatter.ofPattern("MM/dd/yyyy"));
long daysBetween = ChronoUnit.DAYS.between(date1, date2);

ข้อควรระวัง

  • SimpleDateFormat ไม่ thread-safe
  • Time zone อาจส่งผลต่อการคำนวณ (แนะนำตั้ง TimeZone ให้ชัดเจน)
  • ปีอธิกสุรทิน และ daylight saving อาจทำให้คำนวณจากมิลลิวินาทีคลาดเคลื่อน

การทดสอบ

รันแอป จะแสดง "ความแตกต่างระหว่างสองวันที่คือ 367 วัน"