이 튜토리얼에서는 안드로이드 앱에서 두 날짜 사이의 차이(일수)를 계산하는 방법을 단계별로 살펴봅니다. 문자열 형태의 날짜를 SimpleDateFormat으로 파싱한 뒤, 두 Date 객체의 시간 차이를 밀리초 단위로 구하고 이를 일 단위로 변환하는 가장 기본적인 접근 방식을 사용합니다.
1단계: 새 프로젝트 생성
Android Studio에서 File ⇒ New Project를 선택하고, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성 (activity_main.xml)
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 중앙에 결과를 표시할 TextView 하나만 배치한 단순한 구조입니다.
<?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)
src/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";
Date date1;
Date date2;
SimpleDateFormat dates = new SimpleDateFormat("MM/dd/yyyy");
date1 = dates.parse(CurrentDate);
date2 = dates.parse(FinalDate);
long difference = Math.abs(date1.getTime() - date2.getTime());
long differenceDates = difference / (24 * 60 * 60 * 1000);
String dayDifference = Long.toString(differenceDates);
textView.setText("두 날짜의 차이는 " + dayDifference + "일 입니다");
} catch (Exception exception) {
Toast.makeText(this, "날짜 차이를 계산할 수 없습니다", Toast.LENGTH_SHORT).show();
}
}
}
핵심 로직 설명:
SimpleDateFormat("MM/dd/yyyy"): "09/24/2018"처럼 월/일/연도 순서로 된 문자열을Date객체로 변환합니다.date1.getTime() - date2.getTime(): 두 날짜의 차이를 밀리초 단위로 계산합니다.Math.abs(): 어느 날짜가 더 나중이든 상관없이 항상 양수 값을 얻도록 합니다.difference / (24 * 60 * 60 * 1000): 하루는 24시간 × 60분 × 60초 × 1000밀리초이므로, 이 값으로 나누면 일수가 됩니다.
4단계: 매니페스트 설정 (androidManifest.xml)
androidManifest.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 옵션 목록에서 자신의 모바일 기기를 선택하세요. 그러면 기기 화면에 아래와 같이 두 날짜의 차이가 표시됩니다.

참고: 더 현대적인 방법 (java.time API)
API 26(안드로이드 8.0) 이상을 대상으로 한다면, 레거시인 SimpleDateFormat과 Date 대신 java.time API를 사용하는 것이 좋습니다. ChronoUnit.DAYS.between() 메서드 하나로 같은 결과를 얻을 수 있어 코드가 훨씬 간결해지고 스레드 안전성 문제도 피할 수 있습니다.
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
long days = ChronoUnit.DAYS.between(
LocalDate.of(2018, 9, 24),
LocalDate.of(2019, 9, 26)); // 결과: 367일
그 이하 버전을 지원해야 하는 경우에는 ThreeTenABP 백포트 라이브러리를 사용하면 동일한 API를 그대로 활용할 수 있습니다.