2015-04-06 21 views
5

Ho bisogno del tuo aiuto per ottenere l'elenco dei mesi e degli anni in String tra due date. L'utente entrerà due date nel formato stringa di:Come ottenere l'elenco di mesi e anni tra due date

String date1 ="JAN-2015"; 
String date2 ="APR-2015"; 

Così il risultato dovrebbe essere:

  • gen-2015
  • FEB-2015
  • MAR-2015

Ho provato a utilizzare il seguente codice ma mi hanno dato risultati errati:

List<Date> dates = new ArrayList<Date>(); 

String str_date ="JAN-2015"; 
String end_date ="APR-2015"; 

DateFormat formatter ; 

formatter = new SimpleDateFormat("MMM-yyyy"); 
Date startDate = formatter.parse(str_date); 
Date endDate = formatter.parse(end_date); 
long endTime =endDate.getTime() ; 
long curTime = startDate.getTime(); 
while (curTime <= endTime) { 
    dates.add(new Date(curTime)); 
    curTime ++; 
} 
for(int i=0;i<dates.size();i++){ 
    Date lDate =(Date)dates.get(i); 
    String ds = formatter.format(lDate);  
    System.out.println(ds); 
} 
+0

Si prega di fornire dettagli sui risultati ottenuti e su ciò che si è fatto per cercare di trovare il problema. – kaylum

+0

Errore Java heap space – 99maas

+0

'curTime' è il tempo in millisecondi. Ciò significa che un mese è di circa 30 giorni × 24 ore × 60 minuti × 60 secondi × 1000 millisecondi, e lo stai incrementando di un millisecondo ogni iterazione. – RealSkeptic

risposta

5

Utilizzare meno codice possibile e librerie java di base e ottenere il risultato richiesto. Quindi puoi modificare le variabili date1 e date2.

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class Main { 
    public static void main(String[] args) { 
     String date1 = "JAN-2015"; 
     String date2 = "APR-2015"; 

     DateFormat formater = new SimpleDateFormat("MMM-yyyy"); 

     Calendar beginCalendar = Calendar.getInstance(); 
     Calendar finishCalendar = Calendar.getInstance(); 

     try { 
      beginCalendar.setTime(formater.parse(date1)); 
      finishCalendar.setTime(formater.parse(date2)); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     while (beginCalendar.before(finishCalendar)) { 
      // add one month to date per loop 
      String date =  formater.format(beginCalendar.getTime()).toUpperCase(); 
      System.out.println(date); 
      beginCalendar.add(Calendar.MONTH, 1); 
     } 
    } 
} 
+0

Qualcosa da notare: se stai salvando le istanze del calendario, assicurati di memorizzare un beginCalendar.clone() piuttosto che beginCalendar stesso. – amitav13

1

Nel caso la vostra versione di Java è < 8 si potrebbe usare calendario come segue:

private final static DateFormat formatter = new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH); 

public static void main(String[] args) throws ParseException { 
    Calendar startDate = stringToCalendar("Jan-2015"); 
    Calendar endDate = stringToCalendar("Apr-2015"); 

    while (startDate.before(endDate)) { 
     System.out.println(formatter.format(startDate.getTime())); 
     startDate.add(Calendar.MONTH, 1); 
    } 
} 

private static Calendar stringToCalendar(String string) throws ParseException {  
    Date date = formatter.parse(string); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 
    return calendar; 
} 

Se si dispone di un lusso di Java 8 allora il codice diventa più semplice:

public static void main(String[] args) {   
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM-yyyy", Locale.ENGLISH); 
    YearMonth startDate = YearMonth.parse("Jan-2015", formatter); 
    YearMonth endDate = YearMonth.parse("Apr-2015", formatter); 

    while(startDate.isBefore(endDate)) { 
     System.out.println(startDate.format(formatter)); 
     startDate = startDate.plusMonths(1); 
    } 
} 
Problemi correlati