본문 바로가기
안드로이드 자바

[JAVA][Android] 수업 종료 날짜 계산하기 (주 단위)

by teamnova 2021. 9. 22.

안녕하세요!

 

오늘은 스틱 코드를 이용하여 수업 종료 날짜를 계산해 보겠습니다.

 

예를 들어,

주 1회,

총 수업 횟수 20번,

수업 시작일이 '2021-07-04' 에 시작한다 가정해 보았을 때

수업이 언제 끝나고 오늘로부터 얼마나 남았는지, 무슨 요일인지 계산을 해보도록 하겠습니다.

 

* 계산된 예시

앱을 실행하여 계산을 하면 다음과 같은 결과를 얻을 수 있습니다.

 

 

1. 목표 일 계산

먼저 시작일 포함 총 20회 수업을 들었을 때 마지막 수업 일을 구하는 메소드를 만들어 보도록 할게요.

public static String dateFormat = "yyyy-MM-dd"; // 전역 변수

// startDateStr : 시작일(String), week : 회차
public String getDate(String startDateStr, int week) {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date startDate = new Date();
        try {
            // String -> Date
            startDate =  df.parse(startDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
		
        // '(회차-1) * 7'일 구하기 -> 수업일로 부터 며칠 뒤 인지 계산
        int dateCount = (week-1) * 7;
		
        // cal 변수에 시작일을 대입
        // -> dateCount 만큼의 일 수 더하기
        cal.setTime(startDate);
        cal.add(Calendar.DATE, dateCount);
		
        // 더해진 날짜를
        // Calander -> Date -> String
        Date afterDate = cal.getTime();
        String afterDateStr = df.format(afterDate);



        return afterDateStr;


    }

 

코드 중 (week - 1 ) 부분은 시작일을 수업 시작일로 계산하기 때문에 한주 마이너스 하였습니다.

 

 

2. 오늘부터 수업 종료까지 남은 일 수 구하기

다음으로 오늘 날짜로부터 수업 종료일까지 며칠 남았는지 계산을 해보도록 할게요

 

public String getDue(String endDate) {

        Calendar calToday = Calendar.getInstance();
        Calendar calDDay = Calendar.getInstance();

        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date dDay = new Date();
        try {
            dDay = df.parse(endDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
		
        // D-Day -> calDay 적용
        calDDay.setTime(dDay);
		
        // 날짜 -> 밀리세컨트로 변환 -> 하루 단위로 계산
        long lToday = calToday.getTimeInMillis() / (24*60*60*1000);
        long lDDay = calDDay.getTimeInMillis() / (24*60*60*1000);
		
        // D-Day - 오늘
        long calculate = lDDay - lToday;
		
        // long -> String
        String countDDay = Long.toString(calculate);

        return countDDay;


    }

 

수업 종료일과 오늘을 일 단위로 변경하여 두 날짜의 차이 계산을 계산 합니다.

 

 

3. 수업 마지막 날 요일 구하기

수업 마지막 날은 무슨 요일인지 확인해보는 코드 입니다.

public String getDOW(String endDate) {

        Calendar cal = Calendar.getInstance();


        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date dDay = new Date();
        try {
            dDay = df.parse(endDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        cal.setTime(dDay);

        String dayOfWeek = cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.KOREAN);

        return dayOfWeek;

    }

 

 

4. 전체 코드

위에서 만든 메소드를 버튼 클릭 시 작동하도록 코드를 작성합니다.

public class MainActivity extends AppCompatActivity {

    public static String dateFormat = "yyyy-MM-dd";

    Button convertBtn;
    EditText writeDate;
    EditText writeWeek;
    TextView dayTv;
    TextView dueTv;
    TextView dowTv;

    String getStartDate;
    int getWeek;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();



        convertBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getStartDate = writeDate.getText().toString();
                getWeek = Integer.parseInt(writeWeek.getText().toString());

                String endDate = getDate(getStartDate, getWeek);

                dayTv.setText(endDate);

                String dDay = getDue(endDate);

                dueTv.setText(dDay);

                String dayOfWeek = getDOW(endDate);

                dowTv.setText(dayOfWeek);

            }
        });



    }

    private void init() {
        convertBtn = findViewById(R.id.button);

        writeDate = findViewById(R.id.editTextDate);
        writeWeek = findViewById(R.id.editTextNumber);

        dayTv = findViewById(R.id.day);
        dueTv = findViewById(R.id.due);
        dowTv = findViewById(R.id.dayofweek);
    }


    public String getDate(String startDateStr, int week) {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date startDate = new Date();
        try {
            startDate =  df.parse(startDateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        int dateCount = (week-1) * 7;

        cal.setTime(startDate);
        cal.add(Calendar.DATE, dateCount);

        Date afterDate = cal.getTime();
        String afterDateStr = df.format(afterDate);



        return afterDateStr;


    }

    public String getDue(String endDate) {
        Calendar calToday = Calendar.getInstance();
        Calendar calDDay = Calendar.getInstance();

        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date dDay = new Date();
        try {
            dDay = df.parse(endDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        calDDay.setTime(dDay);

        long lToday = calToday.getTimeInMillis() / (24*60*60*1000);
        long lDDay = calDDay.getTimeInMillis() / (24*60*60*1000);

        long calculate = lDDay - lToday;

        String countDDay = Long.toString(calculate);

        return countDDay;


    }

    public String getDOW(String endDate) {

        Calendar cal = Calendar.getInstance();


        SimpleDateFormat df = new SimpleDateFormat(dateFormat);
        Date dDay = new Date();
        try {
            dDay = df.parse(endDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        cal.setTime(dDay);

        String dayOfWeek = cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.KOREAN);

        return dayOfWeek;

    }



}

 

 

5. 실행

 

 

 

 

참고자료

* 주차 계산기

https://stickode.com/detail.html?no=2454 

 

스틱코드

 

stickode.com