我知道如何创建字符串或整数数组,但是如何创建日期数组:/
答案 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”的原因是它是一个原语而不是一个对象。
因此,对您的问题的简单回答是,您必须为数组的每个元素分配一个新日期: - )