wake-up-neo.net

Android berechnet Tage zwischen zwei Terminen

Ich habe den folgenden Code geschrieben, um Tage zwischen zwei Terminen zu finden

    startDateValue = new Date(startDate);
    endDateValue = new Date(endDate);
    long diff = endDateValue.getTime() - startDateValue.getTime();
    long seconds = diff / 1000;
    long minutes = seconds / 60;
    long hours = minutes / 60;
    long days = (hours / 24) + 1;
    Log.d("days", "" + days);

Wenn Start- und Enddatum 2/3/2017 bzw. 3/3/2017 sind, ist die Anzahl der angezeigten Tage 29. Obwohl sie am selben Tag sind, wird der Wert 1 angezeigt nimmt man einen einzigen Tag Urlaub, muss er dasselbe Start- und Enddatum auswählen. (In diesem Fall hat er zwei Tage Urlaub genommen).

Was mache ich falsch? Vielen Dank für Ihre Zeit.

4

Ihr Code zum Generieren eines Datumsobjekts:

Date date = new Date("2/3/2017"); //deprecated

Sie erhalten 28 Tage als Antwort, weil laut Date(String) constructor Tag = 3, Monat = 2 und Jahr = 2017 ist

Sie können String in Date wie folgt konvertieren:

String dateStr = "2/3/2017";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf.parse(dateStr);

Verwenden Sie die obige Vorlage, um Ihr Date-Objekt zu erstellen. Verwenden Sie dann den folgenden Code, um Tage zwischen zwei Datumsangaben zu berechnen. Hoffe das klar das Ding.

Dies kann wie folgt geschehen:

long diff = endDateValue.getTime() - startDateValue.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

Bitte überprüfen Sie Link

Wenn Sie Joda Time verwenden, ist es viel einfacher:

int days = Days.daysBetween(date1, date2).getDays();

Bitte überprüfen Sie JodaTime

Wie verwende ich JodaTime in Java Project

21
SachinSarawgi

Welches Datumsformat verwenden Sie? Ist es d/M/yyyy oder M/d/yyyy?

d = Tag, M = Monat, JJJJ = Jahr

(Siehe: https://developer.Android.com/reference/Java/text/SimpleDateFormat.html )

Dann die Codes:

public static final String DATE_FORMAT = "d/M/yyyy";  //or use "M/d/yyyy"   

public static long getDaysBetweenDates(String start, String end) {
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH);
    Date startDate, endDate;
    long numberOfDays = 0;
    try {
        startDate = dateFormat.parse(start);
        endDate = dateFormat.parse(end);
        numberOfDays = getUnitBetweenDates(startDate, endDate, TimeUnit.DAYS);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return numberOfDays;
}

Und für getUnitBetweenDates Methode:

private static long getUnitBetweenDates(Date startDate, Date endDate, TimeUnit unit) {
    long timeDiff = endDate.getTime() - startDate.getTime();
    return unit.convert(timeDiff, TimeUnit.MILLISECONDS);
}
4
Janice Kartika
public static int getDaysDifference(Date fromDate,Date toDate)
{
if(fromDate==null||toDate==null)
return 0;

return (int)( (toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24));
}
3
Jitendra virani

Schauen Sie sich diesen Code an, das ist hilfreich für mich, ich hoffe, er wird Ihnen helfen.

public String get_count_of_days(String Created_date_String, String Expire_date_String) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());

Date Created_convertedDate = null, Expire_CovertedDate = null, todayWithZeroTime = null;
try {
    Created_convertedDate = dateFormat.parse(Created_date_String);
    Expire_CovertedDate = dateFormat.parse(Expire_date_String);

    Date today = new Date();

    todayWithZeroTime = dateFormat.parse(dateFormat.format(today));
} catch (ParseException e) {
    e.printStackTrace();
}

int c_year = 0, c_month = 0, c_day = 0;

if (Created_convertedDate.after(todayWithZeroTime)) {
    Calendar c_cal = Calendar.getInstance();
    c_cal.setTime(Created_convertedDate);
    c_year = c_cal.get(Calendar.YEAR);
    c_month = c_cal.get(Calendar.MONTH);
    c_day = c_cal.get(Calendar.DAY_OF_MONTH);

} else {
    Calendar c_cal = Calendar.getInstance();
    c_cal.setTime(todayWithZeroTime);
    c_year = c_cal.get(Calendar.YEAR);
    c_month = c_cal.get(Calendar.MONTH);
    c_day = c_cal.get(Calendar.DAY_OF_MONTH);
}


/*Calendar today_cal = Calendar.getInstance();
int today_year = today_cal.get(Calendar.YEAR);
int today = today_cal.get(Calendar.MONTH);
int today_day = today_cal.get(Calendar.DAY_OF_MONTH);
*/

Calendar e_cal = Calendar.getInstance();
e_cal.setTime(Expire_CovertedDate);

int e_year = e_cal.get(Calendar.YEAR);
int e_month = e_cal.get(Calendar.MONTH);
int e_day = e_cal.get(Calendar.DAY_OF_MONTH);

Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();

date1.clear();
date1.set(c_year, c_month, c_day);
date2.clear();
date2.set(e_year, e_month, e_day);

long diff = date2.getTimeInMillis() - date1.getTimeInMillis();

float dayCount = (float) diff / (24 * 60 * 60 * 1000);

return ("" + (int) dayCount + " Days");

}

2
Mr. Mad

Unterstützt AndroidJava-8 vollständig? Wenn ja, können Sie einfach ChronoUnitclass verwenden 

LocalDate start = LocalDate.of(2017,2,3);
LocalDate end = LocalDate.of(2017,3,3);

System.out.println(ChronoUnit.DAYS.between(start, end)); // 28

oder dasselbe mit dem Formatierer

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy");
LocalDate start = LocalDate.parse("2/3/2017",formatter);
LocalDate end = LocalDate.parse("3/3/2017",formatter);

System.out.println(ChronoUnit.DAYS.between(start, end)); // 28
2
Anton Balaniuc

Ganz einfach, verwenden Sie einfach Kalender, erstellen Sie zwei Instanzen für die beiden Datumsangaben, konvertieren Sie in Millisekunden, subtrahieren und konvertieren Sie sie in Tage (aufgerundet) ...

Calendar startDate = Calendar.getInstance();
startDate.set(mStartYear, mStartMonth, mStartDay);
long startDateMillis = startDate.getTimeInMillis();

Calendar endDate = Calendar.getInstance();
endDate.set(mEndYear, mEndMonth, mEndDay);
long endDateMillis = endDate.getTimeInMillis();

long differenceMillis = endDateMillis - startDateMillis;
int daysDifference = (int) (differenceMillis / (1000 * 60 * 60 * 24));
1
fuzzKitty

Seien Sie vorsichtig, wenn Sie die empfangene Ganzzahl verwenden möchten, z. um einen bestimmten Tag in der benutzerdefinierten Kalenderimplementierung anzugeben. Ich habe zum Beispiel versucht, in der m-App von der Monatskalenderansicht zur Tagesansicht zu wechseln und Tagesinhalte anzuzeigen, indem ich Datumsangaben von 1970-01-01 bis zu einem bestimmten Datum berechnete, und jeder 25. bis 31. Tag des Monats zeigt mich als einen Tag früher an. da datesDifferenceInMillis / (24 * 60 * 60 * 1000); etwas wie 17645,95833333333 zurückgeben kann, und dies in int konvertiert wird, wird der Wert um 1 niedriger. In diesem Fall wird die Anzahl der Tage, die Sie erhalten, durch Runden des erhaltenen Float mithilfe der NumberFormat-Klasse erzielt. Hier ist mein Code:

NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
numberFormat.setRoundingMode(RoundingMode.HALF_UP);
numberFormat.setMaximumFractionDigits(0);
numberFormat.setMinimumFractionDigits(0);
int days = numberFormat.parse(numberFormat.format(value)).intValue();

Ich hoffe es wird hilfreich sein.

1
grabarz121

Kotlin

Hier ist das Beispiel, um Tage von heute bis zu einem bestimmten Datum zu berechnen:

 val millionSeconds = yourDate.time - Calendar.getInstance().timeInMillis
 leftDays.text = TimeUnit.MILLISECONDS.toDays(millionSeconds).toString() + "days"

Wenn Sie zwei Tage berechnen möchten, ändern Sie Folgendes:

val millionSeconds = yourDate1.time - yourDate2.time

sollte arbeiten.

1
William Hu