2010-12-17 9 views
2

Ich versuche etwas und ich bin nicht ganz sicher, wie ich es angehen soll. Ich habe zwei benutzerdefinierte Werte ..... eine Dauer und eine Dauereinheit. An diesem Punkt habe ich bereits ein Startdatum, also möchte ich die Dauer und durationUnit irgendwie auf startDate anwenden, um das endDate zu bekommen.Java Dezimal zu Datum Wert

Dauer ist eine Dezimalzahl, durationUnit ein HardCode/AbstractCode-Wert und Startdatum ist ein Datum.

Also wenn das Startdatum 17/12/2010 ...... ist und der Benutzer folgendes eingibt;

Dauer: 3 Dauer Einheit: Monate

Ich möchte die endDate dann als 17/03/2011 berechnet werden. Irgendeine Idee, wie ich das machen könnte? Die Dauereinheit könnte Tage, Monate oder Jahre sein.

Vielen Dank im Voraus!

Antwort

3

Werfen Sie einen Blick auf joda-time. Es ist ein hervorragender Ersatz für Datum/Kalender. Sie können Dinge wie:

DateTime newDate = startDate.plusDays(days); 
          .plusYears(years); 

Period toAdd = periodFormatter.parse(inputString); 
DateTime newDate = startDate.plus(toAdd); 
1

Sie können die Tag/Monat/Jahr in den entsprechenden Kalendertag, Monat oder Jahr Karte. Dann verwende calendar.add(). Wenn Sie als Dezimalzahl einen Doppelwert angeben, müssen Sie wahrscheinlich etwas verarbeiten, um Teile eines Werts in geeignete Werte zu konvertieren (z. B. Ändern von .5 DAY auf 12 Stunden).

0

DateFormatter ist auch nützlich, wenn Sie möchten, dass ein Datum in verschiedenen Stilen dargestellt wird. Hier werden der Kürze halber die Methoden für Klassen aufgerufen, die Sie zuerst initialisieren sollten, egal ob Sie eine Factory oder einen Konstruktor verwenden. Die folgenden Aussagen dienen nur dazu, die Idee zu erfassen. Weitere Informationen finden Sie in der JavaDoc-API.


Calendar.set(...) //(to set year, month and day). 
Calendar.add(...)//(to add a value on specific unit (month, day or year)) 
Calendar.getInstance() //(return Date object) 
DateFormat.format(..) //(return a String representing a style used at instantiation of //DateFormat) 
0

Haben Sie nicht versucht, den Datumstyp mit

Date myDate = new Date(); 
myDate.setMonth(); 
myDate.setDay(); 

Ich habe es selbst nicht verwenden, so kann ich Ihnen wirklich, sagen, ob es wirklich funktioniert, aber Sie shoul es versuchen

+0

Diese Methoden sind veraltet. Nun, es liegt hauptsächlich daran, dass sie keine Zeitzonen unterstützen, was in diesem Fall nicht wirklich wichtig ist, aber die Methoden von Calendar machen es auch viel einfacher, eine bestimmte Dauer hinzuzufügen, sodass es keinen Grund gibt, veraltete Methoden zu verwenden. –

0

Andere sagten, es bereits, hier eine konkretere Probe java.util.Calendar mit:

Calendar cal = Calendar.getInstance(); 
cal.setTime(startDate); 

if(durationUnit.equals("day")){ 
    cal.add(Calendar.DATE, duration); 
} else if(durationUnit.equals("month")){ 
    cal.add(Calendar.MONTH, duration); 
} else if(durationUnit.equals("year")){ 
    cal.add(Calendar.YEAR, duration); 
} 

Date endDate = cal.getTime(); 
+0

+1 unter Berücksichtigung der set-Methoden in java.util.Date sind veraltet, mit einem Kalender ist der Standard Weg zu gehen. –