它将包含以下条目:

{{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(十二月)。

07-28 02:39
查看更多