它将包含以下条目:
{{Date(2014, 1, 1), Date(2013, 11, 31)},
{Date(2014, 1, 11), Date(2013, 11, 31)},
{Date(2014, 1, 21), Date(2013, 11, 31)},
{Date(2014, 1, 31), Date(2013, 11, 31)}}
我目前正在使用此:
public static Map<Date, Date> dateMap = new HashMap<Date, Date>(){{
final Calendar cal = Calendar.getInstance();
final Calendar cal2 = Calendar.getInstance();
cal.set(2014, 0, 1, 0, 0, 0);
cal2.set(2013, 11, 31, 0, 0, 0);
put(cal.getTime(), cal2.getTime());
cal.set(2014, 0, 11, 0, 0, 0);
put(cal.getTime(), cal2.getTime());
cal.set(2014, 0, 21, 0, 0, 0);
put(cal.getTime(), cal2.getTime());
cal.set(2014, 0, 31, 0, 0, 0);
put(cal.getTime(), cal2.getTime());
}};
最佳答案
首先,您使用的已弃用的Date构造函数无法识别数字值为12
的月份。 12月以11
表示,因此日期Date(2013, 12, 31)
将导致重新计算。
其次,您现在可以使用Java 8的LocalDate
简化您的方案。
例:
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author Buhake Sindi
* @since 03 September 2015
*
*/
public class Test {
private static LocalDate[][] localDates = {{LocalDate.of(2014, 1, 1), LocalDate.of(2013, 12, 31)},
{LocalDate.of(2014, 1, 11), LocalDate.of(2013, 12, 31)},
{LocalDate.of(2014, 1, 21), LocalDate.of(2013, 12, 31)},
{LocalDate.of(2014, 1, 31), LocalDate.of(2013, 12, 31)}};
private static Map<Date, Date> dates = new HashMap<>();
static {
for (LocalDate[] _localDates : localDates) {
dates.put(Date.from(_localDates[0].atStartOfDay(ZoneId.systemDefault()).toInstant()), Date.from(_localDates[1].atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
}
public static void main(String[] args) {
System.out.println(dates);
}
}
请注意,
LocalDate
中的月份从1
(一月)开始到12
(十二月),而不像Date
,它来自0
(一月)和11
(十二月)。