Разница между двумя датами не работает должным образом? - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь найти, выбрано ли date, а сегодняшняя date разница равна или больше 18 лет или нет.

Для получения сегодняшней даты, следующий мой код

private val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault())
    private val date = Date()
    private val todayDate = simpleDateFormat.parse(simpleDateFormat.format(date)).time
private val cal = Calendar.getInstance()

 cal.time = date
 val date = simpleDateFormat.parse("12-11-2001").time
val years = (todayDate - date) / (1000L * 60 * 60 * 24 * cal.getActualMaximum(Calendar.DAY_OF_YEAR))

Теперь моя выбранная дата - 12-11-2001, а сегодняшняя дата - 11-11-2019, поэтому она должна показывать 17 лет, но она показывает 18 лет. Даже если я выберу 13,14 или 15 ноября 2001 года, он показывает 18 лет вместо 17 лет, но если я выберу 16th Novemeber 2001, то он показывает 17 лет. Я не могу понять, почему это происходит.

Ответы [ 4 ]

1 голос
/ 11 ноября 2019

Лучше использовать java.time API для задач такого рода:

import java.time.*
import java.time.format.*
import java.time.temporal.ChronoUnit

fun main() {
    val today = LocalDate.now()
    val date = LocalDate.parse("12-11-2001", DateTimeFormatter.ofPattern("dd-MM-yyyy"))

    val diff = ChronoUnit.YEARS.between(date, today)

    println("Diff between $date and $today is $diff years")
}

Если вы еще не можете использовать java.time из-за ограничения minSdkVersion, вы можете использовать ThreeTen Backport проект и его адаптация под Android ThreeTenABP .

0 голосов
/ 11 ноября 2019

Import all component as shown in Image. Вот правильное решение для получения количества лет между двумя датами (разница между двумя датами).

Добавить этот кодв методе onCreate.

var d1: Date? = null
var d2: Date? = null
val dateStart = "12-11-2001"
val dateStop = "11-11-2019"
val format = SimpleDateFormat("dd-MM-yyyy")
d1 = format.parse(dateStart)
d2 = format.parse(dateStop)
Log.d("Year_Difference", getDiffYears(d1, d2).toString())

Добавьте эти два метода в свою деятельность.

fun getDiffYears(first: Date, last: Date): Int {
        val a = getCalendar(first)
        val b = getCalendar(last)
        var diff = b.get(YEAR) - a.get(YEAR)
        if (a.get(MONTH) > b.get(MONTH) || a.get(MONTH) == b.get(MONTH) && a.get(DATE) > b.get(DATE)) {
            diff--
        }
        return diff
    }


fun getCalendar(date: Date): Calendar {
        val cal = Calendar.getInstance(Locale.US)
        cal.time = date
        return cal
    }
0 голосов
/ 11 ноября 2019
public int GetDifference(long start,long end){
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(start);
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    int min = cal.get(Calendar.MINUTE);
    long t=(23-hour)*3600000+(59-min)*60000;

    t=start+t;

    int diff=0;
    if(end>t){
        diff=(int)((end-t)/ TimeUnit.DAYS.toMillis(1))+1;
    }

    int leapYear = (diff/365)/4;


    return  (diff-leapYear)/365;
}    

вам нужно определить високосные годы, этот код возвращает 17

0 голосов
/ 11 ноября 2019
  • Попробуйте это может помочь вам.

    context  = YourActivity.this;
    btn_datePicker = findViewById(R.id.btn_datePicker);
    
    Calendar calendar = Calendar.getInstance();
    final int day = calendar.get(Calendar.DAY_OF_MONTH);
    final int month = calendar.get(Calendar.MONTH);
    final int year = calendar.get(Calendar.YEAR);
    
    btn_datePicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            datePicker = new DatePickerDialog(context, new   DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
    
                    if (i > year - 18 && i1 + 1 > month - (12 * 18)) {
    
    
                        Toast.makeText(context, "Select Proper birth date", Toast.LENGTH_SHORT).show();
    
                    } else {
                        Toast.makeText(context, ""+i2 + "/" + (i1 + 1) + "/" + i, Toast.LENGTH_SHORT).show();
                    }
    
    
                }
            }, year, month, day);
            datePicker.show();
        }
    });
    
...