给定一个只是一天的字符串,例如," Thu"或"星期四",我如何得到一个java.util.Calendar对象,其中一天String表示今天最接近的String。换句话说,今天是星期一,即2012年3月26日,所以如果字符串是"星期四",我想形成代表" 3/29/2013"的日期。如果传入的字符串是" Mon"而且我们星期一,我希望今天约会。在此示例中," 3/26/2013"。
我试过了......
final DateFormat formatter = new SimpleDateFormat("EEE");
java.util.Date date = (Date) formatter.parse(dayOfWeekStr);
final Calendar now = Calendar.getInstance();
dateCal.set(Calendar.YEAR, now.get(Calendar.YEAR));
dateCal.set(Calendar.MONTH, now.get(Calendar.MONTH));
dateCal.setTime(date);
但它不起作用。一旦我设定了日期,年和月的结果就到了1970年1月。
答案 0 :(得分:2)
你快到了。只需将.setTime(..)
放在其余部分上。目前,您通过设置时间来覆盖YEAR和MONTH更改。
凯文指出,它可能并不适用于所有情况。出于这个原因,我建议您使用不同的方法:根据解析的日期从日历中获取DAY_OF_WEEK
,并将其设置为now
。当然,如果需要,你应该注意改变一周。
答案 1 :(得分:0)
我最终选择了
public static Calendar getNearestDateFromDayString(final String dayOfWeekStr,
final Calendar startingDay) throws ParseException {
final DateFormat formatter = new SimpleDateFormat("EEE");
final java.util.Date date = (Date) formatter.parse(dayOfWeekStr);
final Calendar result = Calendar.getInstance();
result.setTime(date);
result.set(Calendar.YEAR, startingDay.get(Calendar.YEAR));
result.set(Calendar.MONTH, startingDay.get(Calendar.MONTH));
result.set(Calendar.HOUR, startingDay.get(Calendar.HOUR));
result.set(Calendar.MINUTE, startingDay.get(Calendar.MINUTE));
result.set(Calendar.SECOND, 0);
java.util.Date today = new java.util.Date();
while (result.getTimeInMillis() <= today.getTime()) {
result.add(Calendar.DATE, 7);
} // while
return result;
} // getNearestDateFromDayString
如果有人有更简洁的解决方案,我会接受。