我试图编写一个名为january
的日期对象数组,并填写2017年1月1日 - 2017年1月31日。
我已经创建了一个名为Date
的课程,并存储了String
个月,int
天和int
年。但我需要一种更快的方式来存储所有这些数据。另外,我想知道你是否可以创建一个名为ToString()的函数,它返回一个包含给定日期的格式很好的字符串。
这是我到目前为止所做的:
Date[]january = new Date[31];
january[0].months = "January";
january[0].days = 1;
january[0].years =2017;
january[1].months = "January";
january[1].days = 2;
january[1].years =2017;
答案 0 :(得分:2)
首先,该代码将崩溃。当您创建Date[31]
时,您需要创建空数组,该数组将填充空值。当您尝试在null对象上设置属性时,您的程序将崩溃。在设置january[0]
的属性之前,需要将其初始化为new Date()
(或任何适当的构造函数)。
您可以使用for循环生成所有日期,而不是手动写出所有日期。
Date[] january = new Date[31];
for (int i = 0; i < january.length; i++) {
january[i] = new Date();
january[i].months = "January";
january[i].days = i + 1;
january[i].years = 2017;
}
请注意,在设置日期时,必须将1添加到i
,因为数组是零索引的,但是月份的日期不是。
编辑:这是我根据问题中的代码简单实现Date:
public class Date {
private String months;
private int days;
private int years;
@Override
public String toString() {
return months + " " + days + ", " + years;
}
}
答案 1 :(得分:1)
如果这是真正的工作而不是作业,我会:
ArrayList
而不是数组。 YearMonth
类代表年月。
Month
是一个enum,有十几个预先定义的对象,一个对象是一月到十二月的每个月。
LocalDate
是一个仅限日期的值,没有时间和没有时区。
List
是interface的ordered collection,ArrayList
是特定的实现。
YearMonth ym = YearMonth.of( 2017 , Month.JANUARY ) ;
int monthLength = ym.lengthOfMonth() ;
List< LocalDate > daysInJanuary = new ArrayList<>( monthLength ) ;
for( int i = 1 ; i <= monthLength ; i ++ ) {
LocalDate ld = ym.atDay( i ) ;
daysInJanuary.add( ld ) ;
}
daysInJanuary.toString():[2017-01-01,2017-01-02,2017-01-03,2017-01-04,2017-01-05,2017-01-06,2017-01- 07,2017-01-08,2017-01-09,2017-01-10,2017-01-11,2017-01-12,2017-01-13,2017-01-14,2017-01-15, 2017-01-16,2017-01-17,2017-01-18,2017-01-19,2017-01-20,2017-01-01,2017-01-22,2017-01-23,2017- 01-24,2017-01-25,2017-01-26,2017-01-27,2017-01-28,2017-01-29,2017-01-30,2017-01-31]
要生成一个表示每个日期值的格式良好的字符串,我会让java.time自动进行本地化。
Locale locale = Locale.CANADA_FRENCH ; // Or Locale.US, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( locale ) ;
for( LocalDate ld : daysInJanuary ) {
String output = ld.format( f ) ;
System.out.println( output ) ;
}
输出是这样的,取决于Locale
:
2017年1月1日星期日
2017年1月2日星期一
2017年1月3日,星期二
...
见code run live at IdeOne.com。但请注意,IdeOne.com仅限于一个Locale
,Locale.US
。
答案 2 :(得分:-1)
import java.util.*;
import java.text.SimpleDateFormat;
Date[]january = new Date[31];
for(int i=0;i<31;i++){ // or use january.length in place of 31
january[i] = new Date(2017, 0, (i+1));
System.out.println(formatDate(january[i]));
}
public static String formatDate(Date date){
return (new SimpleDateFormat("MMMM").format(date) + " "+ new SimpleDateFormat("DD").format(date) + ","+ date.getYear());
}
用于循环或其他循环,因为只有日期在您的代码中发生变化。