Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的日期数组_Java_Arrays_Date - Fatal编程技术网

Java中的日期数组

Java中的日期数组,java,arrays,date,Java,Arrays,Date,我知道如何创建字符串或整数数组,但如何创建日期数组:/与创建字符串和整数的方法相同,只需在其中放置不同的类型: Date [] dates = { new Date(), new Date() }; 声明了一个大小为2且带有两个日期的数组 也可以使用空值进行初始化: Date [] dates = new Date[2]; 或添加更重要的值: Date [] dates = { getDateFromString("25/11/2009"), get

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

与创建字符串和整数的方法相同,只需在其中放置不同的类型:

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方法中完成所做的工作

当然,一开始我没有,因为我的目的是展示,你可以把任何类型的“日期”放在那里

您只需使用方法(从DateFormat类继承)

这是一个完整的工作示例:

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

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


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

,也可以使用Collections API和Calendar类

import java.util.*;

List<Calendar> dates = new ArrayList<Calendar>(5); // initial size
dates.add( Calendar.getInstance() );
import java.util.*;
列表日期=新数组列表(5);//初始尺寸
dates.add(Calendar.getInstance());
< /代码> 你可以考虑(这不是事实,但它是这样工作的)原语是这样的(稍后我会得到现实…所以继续阅读):

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

字符串是这样的:

字符串“Hello”,字符串“world”(不会编译),其中字符串是一个类,“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;
    }
}

现在创建一个数组,如下所示(仍然不会编译):

对于String,我的另一个现实是非常愚蠢的,因为String类不可能预先知道每一个可能的字符串(对于int是可能的)

因此,我们将去掉字符串中的公共静态final变量,改为:

String[] array = new String[] { new String("Hello"), new String("world") };
现在回到现实:

当java编译器看到“Hello”或“world”时,它会执行类似于“newstring”(“Hello”)”的操作——这有点聪明,因此如果一个文件中有20次“Hello”,那么只有一个副本(以及其他一些东西)

当你说:

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.
因为字符串和日期都指向null,所以需要为每个字符串分配一个新对象。您不必用字符串表示“new”的原因是编译器特别处理。不必用int表示“new”的原因是它是一个原语而不是一个对象


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

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

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();
    }
}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.Scanner;
公共类数据输入{
公共静态void main(字符串参数[]){
int n;
ArrayList al=新的ArrayList();
扫描仪输入=新扫描仪(系统输入);
n=in.nextInt();
字符串da[]=新字符串[n];
SimpleDataFormat sdf=新的SimpleDataFormat(“日/月/年”);
sdf.setLenient(错误);
日期[]=新日期[n];
in.nextLine();
对于(int i=0;i
你能写一些你想要的伪代码吗。也许日期[]=新日期[]{'2009-01-01','2009-02-01'},这样我们可以更好地回答这个问题。我喜欢最后一个方向。我得到日期[]部分。。。但是,您是否可以完成在getDateFromString方法中所做的工作?
int[] array = new int[] { int.7, int.42 };
String[] array = new String[] {String."Hello", String."world" };
String[] array = new String[] { new String("Hello"), new String("world") };
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.
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();
    }
}