如何解析我只有日期名称的日期?

时间:2012-03-26 21:16:03

标签: java parsing date

给定一个只是一天的字符串,例如," 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月。

2 个答案:

答案 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

如果有人有更简洁的解决方案,我会接受。