2013-01-03 14 views
6

Di seguito è riportato il codice che sto usando per accedere alla data in passato, 10 giorni fa. L'output è '20130103' che è la data odierna. Come posso restituire la data di oggi - 10 giorni? Mi sono limitato a utilizzare le classi di date java integrate, quindi non posso usare il tempo di joda.Ottieni la data in passato utilizzando java.util.Date

package past.date; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class PastDate { 

    public static void main(String args[]){ 

     DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
     Date myDate = new Date(System.currentTimeMillis()); 
     Date oneDayBefore = new Date(myDate.getTime() - 10);  
     String dateStr = dateFormat.format(oneDayBefore);  
     System.out.println("result is "+dateStr); 

    } 

} 
+1

Hai guardato i [javadocs] (http://docs.oracle.com/javase/7/docs/api/java/util/Date.html)? Il costruttore della data accetta un valore in millisecondi, non un valore in giorni. Inoltre, per prendere in considerazione i problemi di timezone/DST, guarda invece 'Calendar'. – BalusC

+0

modifica questa risposta: http://stackoverflow.com/questions/5894726/how-do-i-do-calendar-arithmetic-with-java-util-date – mcalex

+0

Non risponde alla tua domanda di per sé, ma potresti essere interessato a http://stackoverflow.com/questions/11727933/add-30-days-to-date-in-java?rq=1 Questo ti dice come aggiungere ai giorni, forse potresti trasporlo per sottrarre. – sircapsalot

risposta

12

si poteva manipolare la data con i metodi della calandra.

  DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
      Date myDate = new Date(System.currentTimeMillis()); 
      System.out.println("result is "+ dateFormat.format(myDate)); 
      Calendar cal = Calendar.getInstance(); 
      cal.setTime(myDate); 
      cal.add(Calendar.DATE, -10); 
      System.out.println(dateFormat.format(cal.getTime())); 
2

La classe Date rappresenta un istante specifico nel tempo, con precisione millisecondo.

Date oneDayBefore = new Date(myDate.getTime() - 10); 

Così qui si sottrae a soli 10 millesimi di secondo, ma è necessario sottrarre 10 giorni moltiplicandolo per 10 * 24 * 60 * 60 * 1000

5

Questa linea

Date oneDayBefore = new Date(myDate.getTime() - 10);  

imposta la data indietro di 10 millisecondi, non 10 giorni. La soluzione più semplice sarebbe quella di sottrarre solo il numero di millisecondi in 10 giorni:

Date tenDaysBefore = new Date(myDate.getTime() - (10 * 24 * 60 * 60 * 1000));  
+1

È un po 'incerto lavorare direttamente con i millisecondi del genere - verrà annullato dall'ora legale. Risparmio per utilizzare i metodi incorporati del calendario. –

3

Utilizzare Calendar.add(Calendar.DAY_OF_MONTH, -10).

1
Date today = new Date(); 
Calendar cal = new GregorianCalendar(); 
cal.setTime(today); 
cal.add(Calendar.DAY_OF_MONTH, -30); 
Date today30 = cal.getTime(); 
System.out.println(today30); 
+0

Sebbene questo codice possa risolvere il problema del poster, alcune linee di spiegazione potrebbero aiutare tutti coloro che leggono questo post a comprendere la soluzione. – Thom

Problemi correlati