2009-11-26 49 views
7

Tôi biết cách tạo một chuỗi các chuỗi hoặc số nguyên, nhưng làm thế nào để tạo một mảng ngày:/Mảng ngày tháng trong Java

+1

bạn có thể viết một số mã giả của những gì bạn muốn. Có lẽ Ngày [] = Ngày mới [] {'2009-01-01', '2009-02-01'}, theo cách này chúng ta có thể trả lời câu hỏi này tốt hơn. –

Trả lời

21

Giống như cách bạn làm cho Chuỗi và Int, bạn chỉ cần đặt các loại khác nhau bên trong:

Date [] dates = { 
    new Date(), 
    new Date() 
}; 

Khai báo một mảng có kích thước hai với hai ngày.

Bạn cũng có thể khởi tạo với giá trị null:

Date [] dates = new Date[2]; 

Hoặc thêm giá trị quan trọng hơn:

Date [] dates = { 
    getDateFromString("25/11/2009"), 
    getDateFromString("24/12/2009") 
}; 

.... 
public Date getDateFromString(String s) { 
    Date result = ...// parse the string set the value etc. 
    return result; 
} 

EDIT

... nhưng là có anyway bạn có thể kết thúc những gì bạn đang làm trong phương thức getDateFromString?

Chắc chắn, ban đầu tôi không hiển thị vì bạn có thể đặt bất kỳ thứ gì thuộc loại "Ngày" ở đó.

Bạn chỉ cần sử dụng SimpleDateFormate.parse() phương pháp (thừa hưởng từ DateFormat lớp)

simpleDateFormatInstance.parse("24/12/2009"); // returns christmas 2009. 

Dưới đây là một mẫu làm việc hoàn chỉnh:

import java.text.SimpleDateFormat; 
import java.text.ParseException; 
import java.util.Date; 
import static java.lang.System.out; 

public class DateArrayTest { 

    private static final SimpleDateFormat dateFormat 
        = new SimpleDateFormat("dd/MM/yyyy"); 
    private static final Date invalidDate = new Date(0); 


    // test creating a date from a string. 
    public static void main(String [] args) { 
     Date [] randomDates = { 
      fromString("01/01/2010"), // new year 
      fromString("16/09/2010"), // 200 yrs Mex indepence 
      fromString("21/03/2010"), // uhhmm next spring? 
      fromString("this/should/fail"), // invalid date. 
     }; 

     for(Date date: randomDates) { 
      print(date); 
     } 
    } 

    /** 
    * Creates a date from the given string spec. 
    * The date format must be dd/MM/yyyy ie. 
    * 24 december 2009 would be: 24/12/2009 
    * @return invalidDate if the format is invalid. 
    */ 
    private static final Date fromString(String spec) { 
     try { 
      return dateFormat.parse(spec); 
     } catch(ParseException dfe) { 
      return invalidDate; 
     } 
    } 
    private static final void print(Date date) { 
     if(date == invalidDate) { 
      out.println("Invalid date"); 
     } else { 
      out.println(dateFormat.format(date)); 
     } 
    } 
} 
+0

tôi thích hướng cuối cùng. tôi nhận được ngày [] phần ... nhưng có anyway bạn có thể hoàn thành những gì bạn đã làm trong phương pháp getDateFromString? – Madison

+0

cảm ơn rất nhiều, điều này đã giúp. – Madison

4

bạn có thể sử dụng một loạt các java.util.Date (tài liệu API là here)

Date[] dates = new Date[] { 
    new Date(), 
    new Date(), 
}; 

Bạn có thể cre ăn một mảng của bất kỳ loại đối tượng trong java - tất cả các tài liệu tham khảo và các loại nguyên thủy

1

Hoặc bạn có thể sử dụng bộ sưu tập API và Lịch lớp,

import java.util.*; 

List<Calendar> dates = new ArrayList<Calendar>(5); // initial size 
dates.add(Calendar.getInstance()); 
0

Bạn có thể xem xét (và đây không phải là thực tế, nhưng nó loại của các công trình theo cách này) mà nguyên thủy là một cái gì đó như thế này (tôi nhận được để thực tế sau này ... vì vậy hãy đọc):

int.7, int.42 (sẽ không biên dịch) trong đó int là một lớp (nó không phải là) và 7 và 42 là biến cuối cùng tĩnh công khai (chúng không phải là).

và Strings là một cái gì đó như thế này:.

String "Xin chào", String "thế gian" (sẽ không biên dịch), nơi String là một lớp (đó là) và "Hello" và "thế giới". là các biến cuối cùng tĩnh công khai (chúng không phải là).

Nếu thực tế giả của tôi đã thành sự thật, bạn sẽ cần phải có một cái gì đó như:

// again, won't compile. 
public class int 
{ 
    public static final int 7 = new int(7); 
    public static final int 42 = new int(42); 
    private final ??? data; 

    public int(??? val) 
    { 
     data = val; 
    } 
} 

// also will not compile 
public class String 
{ 
    public final String "Hello" = new String("Hello); 
    public final String "world" = new String("world); 
    private final ??? data; 

    public String(final ??? val) 
    { 
     data = val; 
    } 
} 

bây giờ bạn làm cho một một mảng tương tự (vẫn sẽ không biên dịch):

int[] array = new int[] { int.7, int.42 }; 
String[] array = new String[] {String."Hello", String."world" }; 

Trong trường hợp String, thực tế thay thế của tôi sẽ rất ngớ ngẩn vì không thể cho lớp String thành kno w trước mỗi chuỗi có thể duy nhất (cho int nó là có thể).

Vì vậy, chúng ta sẽ thoát khỏi các biến thức public static trong String và làm điều này thay vì:

String[] array = new String[] { new String("Hello"), new String("world") }; 

Bây giờ với thực tế:

Khi trình biên dịch java, khi nó thấy "Hello" hay " thế giới "nó làm một cái gì đó tương tự như" chuỗi mới ("Hello") "- nó là một chút thông minh hơn để nếu bạn có" Xin chào "20 lần trong một tập tin mà chỉ có một bản sao (và một số những thứ khác nữa).

Khi bạn nói:

new int[100]; you get an array of 100 ints all set to 0. 
new String[100]; you get an array of 100 Strings all pointing to null. 
new Data[100]; you get 100 Dates all pointing to null. 

Kể từ khi String và những ngày đang trỏ null bạn cần phải phân bổ một đối tượng mới cho mỗi một. Lý do mà bạn không cần phải nói "mới" với String là xử lý trình biên dịch là đặc biệt. Lý do bạn không phải nói "mới" với int là nó là nguyên thủy thay vì một đối tượng.

Vì vậy, câu trả lời dễ dàng cho câu hỏi của bạn, bạn cần phải phân bổ một ngày mới cho mỗi phần tử của mảng :-)

+1

: -o .... cái gì .. wheen ... cách ... – OscarRyz

+0

quá trừu tượng? :-) – TofuBeer

1

Ý của bạn là nhập một mảng của dates.This mã sẽ giúp ..

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.Scanner; 

public class Datinput { 

    public static void main(String args[]) { 
     int n; 
     ArrayList<String> al = new ArrayList<String>(); 
     Scanner in = new Scanner(System.in); 
     n = in.nextInt(); 
     String da[] = new String[n]; 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
     sdf.setLenient(false); 
     Date date[] = new Date[n]; 
     in.nextLine(); 
     for (int i = 0; i < da.length; i++) { 
      da[i] = in.nextLine(); 
     } 
     for (int i = 0; i < da.length; i++) { 

      try { 
       date[i] = sdf.parse(da[i]); 
      } catch (ParseException e) { 

       e.printStackTrace(); 
      } 
     } 

     in.close(); 
    } 
} 
+0

Hãy thử cách này ...... :) –

Các vấn đề liên quan