작성
·
267
0
9월 19일과 9월 20일 선택 시 1일 차이로 잘 나옵니다.
하지만 8월 31일과 9월 1일 선택 시 0일 차이로 나옵니다.
Log찍어보면 두 날짜의 밀리초가 같게 나옵니다. 이유가 궁금합니다!
(다른 방법 찾아서 해도 밀리초를 변환해서 계산하는 방법은 다 같은 결과가 나왔습니다.)
package com.yndoo.dday
import android.app.DatePickerDialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.DatePicker
import android.widget.TextView
import org.w3c.dom.Text
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.GregorianCalendar
import java.util.concurrent.TimeUnit
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val startButton = findViewById<Button>(R.id.startBtn)
val endButton = findViewById<Button>(R.id.endBtn)
var startDate = ""
var endDate = ""
var calendar_start = Calendar.getInstance()
var calendar_end = Calendar.getInstance()
startButton.setOnClickListener {
val today = GregorianCalendar()
val year = today.get(Calendar.YEAR)
val month = today.get(Calendar.MONTH)
val day = today.get(Calendar.DATE)
val dlg = DatePickerDialog(this, object: DatePickerDialog.OnDateSetListener{
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
startDate = "${year}${month+1}${dayOfMonth}"
Log.d("날짜확인1",startDate)
calendar_start.set(year, month+1, dayOfMonth)
calendar_start.apply {
set(Calendar.HOUR_OF_DAY, 0)
set(Calendar.MINUTE, 0)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
}
}
}, year, month, day)
dlg.show()
}
endButton.setOnClickListener {
val today = GregorianCalendar()
val year = today.get(Calendar.YEAR)
val month = today.get(Calendar.MONTH)
val day = today.get(Calendar.DATE)
val dlg = DatePickerDialog(this, object: DatePickerDialog.OnDateSetListener{
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
endDate = "${year}${month+1}${dayOfMonth}"
Log.d("날짜확인2",endDate)
calendar_end.set(year, month+1, dayOfMonth)
calendar_end.apply {
set(Calendar.HOUR_OF_DAY, 0)
set(Calendar.MINUTE, 0)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
}
val finalDate = TimeUnit.MILLISECONDS.toDays(calendar_end.timeInMillis - calendar_start.timeInMillis) + 1
//val finalDate = (calendar_end.timeInMillis - calendar_start.timeInMillis)/(24*60*60*1000) + 1
Log.d("@@@",TimeUnit.MILLISECONDS.toDays(calendar_start.timeInMillis).toString())
Log.d("@@@",TimeUnit.MILLISECONDS.toDays(calendar_end.timeInMillis).toString())
findViewById<TextView>(R.id.ddayText).setText("D+" + finalDate.toString())
}
}, year, month, day)
dlg.show()
}
}
}
답변 1
0
안녕하세요 망곰님
사용하신 프로젝트 코드 전체를 압축해서 깃허브/구글 드라이브를 통해서 공유해주시면 살펴볼게요~
그리고 에러가 어떻게 났는지 스크린샷도 함께 주시면 도움드리기 좋을 것 같습니다!
안녕하세요 망공님
수강에 불편을 드려 죄송합니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val startButton = findViewById<Button>(R.id.startBtn)
val endButton = findViewById<Button>(R.id.endBtn)
var startDate = ""
var endDate = ""
val calendar_start = Calendar.getInstance()
val calendar_end = Calendar.getInstance()
startButton.setOnClickListener {
val today = GregorianCalendar()
val year = today.get(Calendar.YEAR)
val month = today.get(Calendar.MONTH)
val day = today.get(Calendar.DATE)
val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener{
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
startDate = year.toString() + (month+1).toString() + dayOfMonth.toString()
calendar_start.set(year, month, dayOfMonth)
Log.d("StartDate : ", startDate)
}
}, year, month, day)
dlg.show()
}
endButton.setOnClickListener {
val today = GregorianCalendar()
val year = today.get(Calendar.YEAR)
val month = today.get(Calendar.MONTH)
val day = today.get(Calendar.DATE)
val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener{
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
endDate = year.toString() + (month+1).toString() + dayOfMonth.toString()
calendar_end.set(year, month, dayOfMonth)
Log.d("EndDate : ", endDate)
val finalDate = TimeUnit.MILLISECONDS.toDays(calendar_end.timeInMillis - calendar_start.timeInMillis)
val textArea = findViewById<TextView>(R.id.finalDate)
textArea.setText(finalDate.toString())
}
}, year, month, day)
dlg.show()
}
}
}
위와 같이 코드를 변경해보시겠어요?
실제 calendar_start calendar_end 에서
set 할 때 month에 +1를 해줘서 발생하는 문제입니다 :)
강의와 같은 코드로 실행해도 날짜 카운트에 오류가 있습니다.
9월 19일과 9월 20일 선택 시 1일 차이로 잘 나옵니다.
하지만 8월 31일과 9월 1일 선택 시 0일 차이로 나옵니다.