Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何列出2009年和2010年所有周一到周四的日历日期?_Java_Calendar - Fatal编程技术网

Java 如何列出2009年和2010年所有周一到周四的日历日期?

Java 如何列出2009年和2010年所有周一到周四的日历日期?,java,calendar,Java,Calendar,我需要向后循环,列出2009年和2010年每周周一到周四的所有日历日期,并将它们记录为映射到一周中某一天的日-月-年字符串的映射: "19-10-2010", "Tuesday" "4-10-2010", "Monday" Java中是否有一个库可以帮助实现这一点,或者仅使用标准库就可以实现这一点?使用日历: 将年份设置为2009年 将年中的日期设置为1 在2009年、2010年的所有日子里反复检查Mon-Thu 代码: Calendar cal=Calendar.getInstance(

我需要向后循环,列出2009年和2010年每周周一到周四的所有日历日期,并将它们记录为映射到一周中某一天的日-月-年字符串的映射:

"19-10-2010", "Tuesday"
"4-10-2010", "Monday"

Java中是否有一个库可以帮助实现这一点,或者仅使用标准库就可以实现这一点?

使用
日历

  • 年份设置为2009年
  • 将年中的日期设置为1
  • 在2009年、2010年的所有日子里反复检查Mon-Thu
代码:

Calendar cal=Calendar.getInstance();
//2009年1月1日开始
计算集(2009年);
校准设置(每年的第1天);
//在2009年或2010年迭代

而(cal.get(YEAR)=Calendar.MONDAY&&dow你可以使用guava的计算地图。这样你就不需要生成所有的日期和它们的星期几并保存在内存中

    ConcurrentMap<String, String> m = new MapMaker()
            .makeComputingMap(new Function<String, String>() {
                Calendar cal = Calendar.getInstance();
                SimpleDateFormat formatDay = new SimpleDateFormat("EEEE");
                SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
                final String notApplicable = "NA";

                @Override
                public String apply(String arg0) {

                    try {
                        cal.setTime(format.parse(arg0));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    int dow = cal.get(DAY_OF_WEEK);
                    int year=cal.get(YEAR);
                    if(year!=2009&&year!=2010)
                        return notApplicable;
                    if (dow >= Calendar.MONDAY && dow <= Calendar.THURSDAY) {
                        return formatDay.format(cal.getTime());
                    }
                    return notApplicable;
                }
            });

你可以在thrusday之后再加上4天,直到下周一。我知道,这是一个接一个的迭代,但我决定让代码更清晰,而不是更快。
while (cal.get(YEAR) <= 2010)
{
    int dow = cal.get(DAY_OF_WEEK);
    if (dow >= Calendar.MONDAY && dow <= Calendar.THURSDAY))
    {
        // add to your map
    }
    cal.add(Calendar.DATE, (dow == Calendar.THURSDAY)? 4 : 1);
}
    ConcurrentMap<String, String> m = new MapMaker()
            .makeComputingMap(new Function<String, String>() {
                Calendar cal = Calendar.getInstance();
                SimpleDateFormat formatDay = new SimpleDateFormat("EEEE");
                SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
                final String notApplicable = "NA";

                @Override
                public String apply(String arg0) {

                    try {
                        cal.setTime(format.parse(arg0));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    int dow = cal.get(DAY_OF_WEEK);
                    int year=cal.get(YEAR);
                    if(year!=2009&&year!=2010)
                        return notApplicable;
                    if (dow >= Calendar.MONDAY && dow <= Calendar.THURSDAY) {
                        return formatDay.format(cal.getTime());
                    }
                    return notApplicable;
                }
            });
 m.get("01-01-2009");