Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 두 날짜의 차이(일수) 계산하는 방법 – 단계별 예제 가이드

이 튜토리얼에서는 안드로이드 앱에서 두 날짜 사이의 차이(일수)를 계산하는 방법을 단계별로 살펴봅니다. 문자열 형태의 날짜를 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) 이상을 대상으로 한다면, 레거시인 SimpleDateFormatDate 대신 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를 그대로 활용할 수 있습니다.