2013-11-20 60 views
0

我要顯示這樣的數組列表:獲得天

[2013-11-01,2013-11-8,2013-11-15,2013-11-22,2013-11-29] 

我寫了下面的代碼,我傳遞的靜態值,這個方法:

import java.sql.Date; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 

import java.util.List; 


public class DateExample { 


    Calendar cal = Calendar.getInstance(); 


    public static void main(String[] args) { 



     DateExample date=new DateExample(); 
     date.getAllDaysInaMonth("2013",11,1); 

    } 

    public List<java.sql.Date> getAllDaysInaMonth(String year,int month,int day){ 
     System.out.println(year+""+month+""+day); 

     cal.set(Calendar.DAY_OF_MONTH, 1); 

     int utilyear=cal.get(cal.YEAR); 
     String syear= Integer.toString(utilyear); 
     int utilmonth=cal.get(cal.MONTH); 
     int utilday=cal.get(cal.DAY_OF_MONTH); 



     List<java.sql.Date> arraylist=new ArrayList<java.sql.Date>(); 
     while (month==cal.get(Calendar.MONTH)) { 
      System.out.println("while"+cal.getTime()); 

       SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); 
       String dateofutil=format.format(cal.getTime()); 
       System.out.println("dateofutil"+dateofutil); 
       try { 
        java.sql.Date sqldate=new java.sql.Date(format.parse(dateofutil).getTime()); 
        arraylist.add(sqldate); 


       } catch (ParseException e) { 

        e.printStackTrace(); 
       } 

      cal.add(Calendar.DAY_OF_MONTH,1); 

       } 
     System.out.println("arraylist values"+arraylist); 
     return arraylist; 
    } 





} 

這裏我正在通過該值打印日期,如yyyy-MM-dd格式,當我通過1天然後7天后打印日期 但上述代碼不能正常工作給我正確的代碼

回答

1

這裏有兩件事需要改變。

首先,

while (month==cal.get(Calendar.MONTH)) { 

需求,因爲根據docs

在格里高利曆和儒略曆中一年中的第一個月是一月份改爲

while (month==cal.get(Calendar.MONTH)+1) { 

這是0;

第二件事是讓你的類型String,而不是DateArrayList,因爲Date不具備的格式。您只能獲得格式化的字符串表示形式。

List<String> arraylist = new ArrayList<String>(); 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // This can go out of the `while` loop though. 
String dateofutil = format.format(cal.getTime()); 
arraylist.add(dateofutil); 
+0

就個人而言,我寧願離開Date'的'數組,然後只執行實際打印時進行格式化。 –

1

您需要進行更改如下:

while (month==cal.get(Calendar.MONTH)) { 

while ((month-1)==cal.get(Calendar.MONTH)) { 

見多Calendar.class ==>十一月it is 10 rather 11。這就是爲什麼以前你沒有得到預期的結果。改變它並繼續。

public final static int NOVEMBER = 10; 

/** 
* Value of the {@link #MONTH} field indicating the 
* twelfth month of the year. 
*/ 
public final static int DECEMBER = 11; 

/** 
* Value of the {@link #MONTH} field indicating the 
* thirteenth month of the year. Although <code>GregorianCalendar</code> 
* does not use this value, lunar calendars do. 
*/ 
public final static int UNDECIMBER = 12; 
0

answer by R.Janswer by MouseLearnJava都是正確的。


使用Joda-Time庫這種日期時間工作更容易。

首先,Joda-Time從一個不同於java.util.Calendar的基於零的愚蠢行爲。所以一週的日子是1 - 7年,1 - 12年的幾個月。

以下是使用Joda-Time 2.3和Java 7的一些示例代碼。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 
// import org.joda.time.format.*; 

// Data passed into method. 
int year = 2014; 
int month = 2; 
int day = 2; 

java.util.List<DateTime> dateTimes = new ArrayList<DateTime>(); 
DateTime start = new DateTime(year, month, day, 0, 0, 0); 
DateTime dateTime = start; 

while(dateTime.monthOfYear().equals(start.monthOfYear())) { 
    dateTimes.add(dateTime); // Collect each date-time object. 
    dateTime = dateTime.plusDays(7); 
} 

System.out.println("The list: " + dateTimes); 

for(DateTime item : dateTimes){ 
    System.out.println(ISODateTimeFormat.date().print(item)); 
} 

當運行...

The list: [2014-02-02T00:00:00.000-08:00, 2014-02-09T00:00:00.000-08:00, 2014-02-16T00:00:00.000-08:00, 2014-02-23T00:00:00.000-08:00] 
2014-02-02 
2014-02-09 
2014-02-16 
2014-02-23