Java 如何列出2009年和2010年所有周一到周四的日历日期?
我需要向后循环,列出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(
"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");