728x90
안녕하세요!
오늘은 스틱 코드를 이용하여 수업 종료 날짜를 계산해 보겠습니다.
예를 들어,
주 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
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] Spinner 예제 (0) | 2021.09.24 |
---|---|
[JAVA][Android] Rxjava와 butterknife를 써서 구구단 앱 만들기 (0) | 2021.09.23 |
[JAVA][Android]안드로이드 스튜디오 QR코드 스캔하기 (0) | 2021.09.19 |
[JAVA][Android] EditText Text변화 (0) | 2021.09.18 |
[JAVA][Android] WebView 만들기 (0) | 2021.09.15 |