Android: Datumsberechnungen

milesdavis

PCGH-Community-Veteran(in)
Hallo Leute,

ich parse mit meiner App unter anderem eine xml-Datei à la
Code:
<termin tag="30" monat="4" jahr="2014" dauer="4"> ... </termin>
Das funktioniert prima soweit. Jetzt lese ich noch die Attribute zum Datum aus und hier komme ich dann nicht weiter:

Ich möchte folgendes ausgeben, wenn eben die Dauer > 0 ist.

30.4.2014 - 4.5.2014

Das Enddatum soll also berechnet werden. In php gelingt mir das prima, nur mit Android bzw. mit Java blicke ich da nicht durch.

Obiges soll aber noch "optimiert" ausgegeben werden als 30.4. - 4.5.2014

Quasi von der Logik her:

Code:
if(Startjahr == Endjahr){ // Ausgabe in der Form: dd.mm.-dd.mm.yyyy}
[INDENT] else if(Startjahr == Endjahr && StartMonat == EndMonat){
// Ausgabe in der Form: dd.-dd.mm.yyyy}
[/INDENT]}
// Datum als String speichern
Hat jemand eine fertige Lösung?
 
Ja, simpel.

Nutze die Calendar class.
Berechnung ist einfach über Calendar.getCurrentTimeInMillis.

Das hatte ich so mal versucht, aber wie gesagt: 100% verstanden habe ich das noch nicht:

Code:
else if(dauer > 0){
[INDENT]monat-=1; //Die Monate im Jahr fangen bei Null an (0-11)!
String dateToParse = jahr+"-"+monat+"-"+tag;
//Date parsedDate = new SimpleDateFormat("yyyy-MM-dd").parse(dateToParse);
[/INDENT][INDENT]SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
[/INDENT][INDENT]Calendar c = Calendar.getInstance();
[/INDENT][INDENT]c.setTime(sdf.parse(dateToParse));
[/INDENT]

Das ist mal ein Ausschnitt.
 
Nein, so nicht.
Hol dir die Calendar instance und setzt über die Methode setTime den Tag, Monat und Jahr.

Verzichte auf SimpleDateFormat.
 
<useless comment>
Achja, Datumsberechnung in Java :) Erst versucht man es mit java.util.Date , aber da sind alle Methoden veraltet. Dann kommt man auf java.sql.Date aber das passt irgendwie auch nicht. Am Ende findet man den GeorgianCalender (oder so) und hat dann mit 2,3 tausend objekten und 7,1 umformungen es endlich geschafft etwas sinnvolles zu schaffen. Ich hasse es :D
</useless comment>
 
Okay, ich habs hinbekommen!

Code:
//Startdatum: einzelne Werte in Date Objekt umwandeln
String dateToParse = jahr+"-"+monat+"-"+tag;
DateFormat formatter; 
Date date;
formatter = new SimpleDateFormat("yyyy-MM-dd");
date = (Date)formatter.parse(dateToParse); 
Calendar cal=Calendar.getInstance();cal.setTime(date);
                                
//Dauer dazurechnen
cal.add(Calendar.DATE, dauer);

//Ausgabe
int start_tag = tag;
int start_monat = monat;
int start_jahr = jahr;
                                
int end_tag = cal.get(Calendar.DATE);
int end_monat = cal.get(Calendar.MONTH)+1;
int end_jahr = cal.get(Calendar.YEAR);
                                
//String zusammensetzen
datum  =  fuerende_null(start_tag)+"."+fuerende_null(start_monat)+"."+start_jahr+"  - "+fuerende_null(end_tag)+"."+fuerende_null(end_monat)+"."+end_jahr;
if(start_jahr == end_jahr){[INDENT]datum  = fuerende_null(start_tag)+"."+fuerende_null(start_monat)+". -  "+fuerende_null(end_tag)+"."+fuerende_null(end_monat)+"."+end_jahr;
[/INDENT][INDENT]if(start_monat == end_monat){
[/INDENT][INDENT][INDENT]datum = fuerende_null(start_tag)+". - "+fuerende_null(end_tag)+"."+fuerende_null(end_monat)+"."+end_jahr;
[/INDENT][/INDENT][INDENT][INDENT]}
[/INDENT][/INDENT][INDENT]}
[/INDENT]
weiter unten noch diese Funktion:

Code:
private static String fuerende_null(int zahl) {[INDENT] String a = "";
[/INDENT][INDENT] if (zahl < 10){
[/INDENT][INDENT][INDENT] a = "0"+zahl;}
[/INDENT][/INDENT][INDENT] else{
[/INDENT][INDENT][INDENT] a = String.valueOf(zahl);}
[/INDENT][/INDENT][INDENT] return a;
[/INDENT]}


So funktioniert das erst einmal für mich. Der komplette Code -> PN an mich!

Ich kann den sicherlich noch kürzen, aber hier gehts ja erstmal ums Verständliche.
 
Zuletzt bearbeitet:
Zurück