Java中的日期数组

时间:2009-11-26 01:14:43

标签: java arrays date

我知道如何创建字符串或整数数组,但是如何创建日期数组:/

5 个答案:

答案 0 :(得分:21)

与String和Int相同,只需在内部放置不同的类型:

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

声明了一个大小为2的数组,其中包含两个日期。

您还可以使用空值进行初始化:

 Date [] dates = new Date[2];

或添加更多重要值:

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

修改

  

...但无论如何你可以在getDateFromString方法中完成你正在做的事情吗?

当然,我最初没有,因为我的观点是要表明,你可以放置任何类型为“日期”的东西。

您只需使用SimpleDateFormate.parse()方法(继承自DateFormat类)

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

这是一个完整的工作样本:

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

答案 1 :(得分:4)

您可以使用java.util.Date数组(API文档为here

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

您可以在java中创建任何对象类型的数组 - 所有引用和基本类型

答案 2 :(得分:1)

或者您可以使用Collections API和Calendar类

import java.util.*;

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

答案 3 :(得分:1)

你的意思是输入一组日期。这段代码会有所帮助......

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();
    }
}

答案 4 :(得分:0)

你可以考虑(这不是现实,但它有点像这样工作)基元就是这样的(我后来才开始实现......所以继续阅读):

int.7,int.42(不会编译)其中int是一个类(它不是),7和42是公共静态最终变量(它们不是)。

并且字符串是这样的:

String。“Hello”,String。“world”(不会编译)其中String是一个类(它是),“Hello”和“world”是公共静态最终变量(它们不是)。

如果我的假现实是真的,你必须要有类似的东西:

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

现在你创建一个像(仍然不会编译)的数组:

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

在String的情况下,我的替代现实将非常愚蠢,因为String类不可能事先知道每个可能的String(对于int是可能的)。

因此我们将摆脱String中的公共静态最终变量,而不是这样做:

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

现在变为现实:

当java编译器看到“Hello”或“world”时,它会执行类似于“new String(”Hello“)的操作” - 它有点聪明,所以如果你有“Hello”20次文件,只有一个副本(以及其他一些东西)。

当你说:

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.

由于String和Date指向null,因此需要为每个对象分配一个新对象。您不必对String说“new”的原因是编译器特别对待它。你不必用int说“new”的原因是它是一个原语而不是一个对象。

因此,对您的问题的简单回答是,您必须为数组的每个元素分配一个新日期: - )