2009-11-26 13 views
7

wiem jak stworzyć tablicę łańcuchów lub liczb, ale w jaki sposób można utworzyć tablicę terminach:/Array od daty Java

+1

Czy możesz napisać pseudo kod, który chcesz. Być może Date [] = new Date [] {'2009-01-01', '2009-02-01'}, w ten sposób możemy lepiej odpowiedzieć na to pytanie. –

Odpowiedz

21

ten sam sposób, co robisz na ciąg i Int, wystarczy umieścić różne rodzaje wewnątrz:

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

Deklarowano tablicę o rozmiarze dwa z dwoma datami.

Można również zainicjować z wartościami zerowymi:

Date [] dates = new Date[2]; 

lub dodać więcej istotnych wartości:

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

... ale czy jest tak ty może zakończyć to, co robiłeś w metodzie getDateFromString?

Oczywiście, początkowo nie, ponieważ moim celem było pokazanie, że można tam umieścić wszystko, co jest typu "Data".

Po prostu trzeba użyć metody SimpleDateFormate.parse() (dziedziczona z dateformat klasa)

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

Oto pełna próbka robocza:

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

Podoba mi się ostatni kierunek. otrzymuję część Date [] ... ale czy mimo to możesz dokończyć to, co robiłeś w metodzie getDateFromString? – Madison

+0

wielkie dzięki, to pomogło. – Madison

4

można użyć tablicę java.util.Date (docs API są here)

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

Możesz cre jedli tablicę dowolnego typu obiektów w Javie - wszelkie odniesienia i prymitywne typy

1

Albo można użyć zbiorów API i kalendarz klasę

import java.util.*; 

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

Można rozważyć (i to nie jest rzeczywistość, ale to rodzaj utworów w ten sposób), że prymitywy są czymś w tym stylu (ja rozumiem później ... czytaj dalej):

int.7, int.42 (nie skompiluje) gdzie int jest klasą (nie jest), a 7 i 42 są publicznymi statycznymi zmiennymi końcowymi (nie są).

i że łańcuchy są mniej więcej tak:.

String "Hello", String "świat" (nie będzie kompilować) gdzie String jest klasa (to jest) i "Hello" i "świat". są publicznymi statycznymi zmiennymi końcowymi (nie są).

Jeśli moja fałszywa rzeczywistość była prawda trzeba by mieć coś takiego:

// 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; 
    } 
} 

i

// 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; 
    } 
} 

teraz zrobić tablicę jak (wciąż nie skompilować):

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

W przypadku String moja alternatywna rzeczywistość byłaby bardzo głupia, ponieważ niemożliwe jest, aby klasa String miała z góry każdy możliwy ciąg (dla int jest to możliwe).

Więc chcemy pozbyć publicznych statycznych zmiennych końcowych STRING i to zrobić w zamian:

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

teraz do rzeczywistości:

Gdy kompilator Javy, gdy widzi „Cześć” lub " world "robi coś podobnego do" new String ("Hello") "- jest nieco mądrzejszy, więc jeśli masz" Hello "20 razy w pliku, który ma tylko jedną kopię (i kilka innych rzeczy).

Kiedy mówisz:

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. 

Ponieważ String oraz data te wskazują na null trzeba przydzielić nowy obiekt dla każdego z nich. Powodem, dla którego nie musisz mówić "nowy" za pomocą String, jest to, że kompilator traktuje to specjalnie. Powodem, dla którego nie musisz mówić "new" przez int, jest to, że jest to obiekt pierwotny zamiast obiektu.

Tak, łatwej odpowiedzi na to pytanie jest, trzeba przydzielić nową datę dla każdego elementu tablicy :-)

+1

: -o .... co ... wheen ... jak ... – OscarRyz

+0

zbyt abstrakcyjne? :-) – TofuBeer

1

Czy chodziło Ci o wprowadzeniu tablicą dates.This kod pomogłoby ..

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

Spróbuj tego ...... :) –