2012-01-04 27 views
7

Devo contare 90 giorni, 120 giorni e 160 giorni per alcuni articoli. Come posso codificare questo? Continuo a trovare il codice java ma questo porta a errori quando sviluppo per Android.Come sottrarre x quantità di giorni dalla data odierna

Ho bisogno di prendere la data di oggi e sottrarre la quantità di giorni x e far sì che il risultato sia visualizzato sullo schermo nient'altro. Grazie

+2

Puoi essere più specifico sugli errori e sul codice che li ha prodotti? – ObscureRobot

+0

possibile duplicato di [Come sottrarre X giorni da una data utilizzando il calendario Java?] (Http://stackoverflow.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java -calendar) –

risposta

18

Si dovrebbe utilizzare la classe Calendar:

//Calendar set to the current date 
Calendar calendar=Calendar.getInstance(); 
//rollback 90 days 
calendar.add(Calendar.DAY_OF_YEAR, -90); 
//now the date is 90 days back 
Log.i("MyApp","90 days ago:"+calendar.getTime().toString()); 
+0

roll() si aggiunge ai campi, non al sottrarre. Ma non è corretto, perché non cambia i campi più grandi. Vedi http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html – nagylzs

+0

hai ragione. grazie. aggiornerò la mia risposta –

7

utilizzare l'oggetto Calendar ...

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -90); //etc 
0

tl; dr

LocalDate.now(ZoneId.of("America/Montreal")) 
     .minusDays(90) 

java.time

altre risposte qui sono obsoleti. Il modo moderno è con le classi java.time.

LocalDate

La classe LocalDate rappresenta un valore di data-solo senza tempo del giorno e senza fuso orario.

Un fuso orario è fondamentale per determinare una data. Per un dato momento, la data varia in tutto il mondo per zona. Ad esempio, pochi minuti dopo la mezzanotte in Paris France è un nuovo giorno mentre è ancora "ieri" in Montréal Québec.

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate today = LocalDate.now(z) ; 

È quindi possibile aggiungere o sottrarre giorni.

LocalDate ago090 = today.minusDays(90) ; 
LocalDate ago120 = today.minusDays(120) ; 
LocalDate ago160 = today.minusDays(160) ; 

per generare una stringa in formato standard ISO 8601 di AAAA-MM-DD, chiamare toString. Per altri formati, cerca Overflow dello stack per la classe DateTimeFormatter per vedere molti esempi e discussioni.

String output = ago120.toString() ; 

Chi java.time

Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi data legacy come java.util.Date, Calendar, & SimpleDateFormat.

Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione a java.time.

Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.

Dove ottenere le classi java.time?

  • Java SE 8 e SE 9 e successivamente
    • incorporato.
    • Parte dell'API Java standard con un'implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • Java SE 6 e SE 7
    • Molte delle funzionalità java.time è di back-porting per Java 6 .
  • Android

Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval, YearWeek, YearQuarter e more.

Problemi correlati