D-DAY앱 디데이 계산에 오류가 있는데 해결하고싶어요
403
작성한 질문수 2
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
안녕하세요 망곰님
사용하신 프로젝트 코드 전체를 압축해서 깃허브/구글 드라이브를 통해서 공유해주시면 살펴볼게요~
그리고 에러가 어떻게 났는지 스크린샷도 함께 주시면 도움드리기 좋을 것 같습니다!
0
강의와 같은 코드로 실행해도 날짜 카운트에 오류가 있습니다.
9월 19일과 9월 20일 선택 시 1일 차이로 잘 나옵니다.
하지만 8월 31일과 9월 1일 선택 시 0일 차이로 나옵니다.
1
안녕하세요 망공님
수강에 불편을 드려 죄송합니다.
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를 해줘서 발생하는 문제입니다 :)
주사위앱 소개 및 레이아웃 설정 문제
0
60
2
안드로이드 에뮬레이터가 실행이 안 되요...ㅠ
0
105
2
30 강 소스 좀 올려 주십시요
0
81
2
onBackPressed 함수가 동영상 하고 다르게 동작합니다.
0
92
2
ListView 초기 실행 안됩니다.
0
96
2
코딩을 완료하고난후 앱 실행시 자동 종료
0
73
2
datavinding에서 오류가 납니다.
0
54
1
안드로이드 스튜디오 버전 차이로 초기 empyt activity 선택하면 안됩니다.
0
114
2
context의 구별에 대하여
0
70
2
"프롤로그에서 ..." 오류 관련해 직전 질문에 대한 추가 질문입니다.
0
70
2
"프롤로그에서 콘텐츠가 허용되지 않습니다." 오류
0
159
3
해결완료
1
188
2
databinding 설정후 run하면 에러(해결)
0
223
2
databinding 설정 이후 실행시 에러
0
274
4
안드로이드 입문하는 사람입니다.
0
71
1
Firebase uid
0
78
3
activity_main 화면 다름
0
116
2
강의화면과 다른데 맞게진행되는것인가요...????
0
107
2
파이어베이스 질문
0
76
2
ActivityMainBinding에 오류가 납니다
0
136
2
선생님 onBackPressed 작동이 안되는거 같습니다
0
119
2
>app>res>layout 이 존재하지 않습니다.
0
119
2
안드로이드 스튜디오 미어캣 버전 사용 한글 깨짐
0
750
2
안드로이드 스튜디오 오류 발생 시 대처 방법은 요?
0
289
2





