ภาพรวม
ตัวอย่างนี้แสดงวิธีคำนวณจำนวนวันที่แตกต่างระหว่างสองวันที่ (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();
}
}
}
หลักการคำนวณ
- แปลงสตริงวันที่เป็น Date object ด้วย SimpleDateFormat
- ใช้
getTime()ได้มิลลิวินาทีจาก Epoch (1970-01-01) - ลบกัน แล้วใช้ Math.abs() เพื่อค่าสัมบูรณ์
- หารด้วยมิลลิวินาทีต่อวัน (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 วัน"