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