如何使用SimpleDateFormat仅解析当天

时间:2011-11-01 10:12:33

标签: java parsing simpledateformat

我想按用户解析给定日期,但使用特定格式:星期的日期名称。

到目前为止,这就是我所做的:

SimpleDateFormat format = new SimpleDateFormat("E", Locale.ENGLISH);

try {
    Date date = format.parse ("Friday");
    Calendar calendar = format.getCalendar();
    calendar.add(Calendar.WEEK_OF_YEAR, 1);
    return calendar.getTime();
}
catch (ParseException pe) {
    return null;
}

但这会让我回头:

2 janv. 1970 00:00:00

我希望它能在未来的星期五(在我们的游戏中时光倒流中4 nov. 2011)返回给我

我该怎么办?

2 个答案:

答案 0 :(得分:3)

获取Calendar.getInstance()和simpyl将DAY_OF_WEEK设置为format.getCalendar()的值。您需要检查当前的星期几是否在星期五之后。在这种情况下 - 增加一周。

答案 1 :(得分:3)

解析当天,将其放入Calendar,以便您可以找到星期几,然后根据当前日期创建另一个日历,以便您可以设置星期几:

currentCalendar.set(Calendar.DAY_OF_WEEK,
                    parsedCalendar.get(Calendar.DAY_OF_WEEK));

请注意,这不一定会将其置于未来 - 它会将当天的设置为当天。所以你可能想要在一周之后添加,如果你想确保它真的在未来:

// Assume we've already done all the parsing
int dayOfWeek = parsedCalendar.get(Calendar.DAY_OF_WEEK);

long now = System.currentTimeMillis();
Calendar currentCalendar = Calendar.getInstance();
currentCalendar.setTimeInMillis(now);
currentCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
if (currentCalendar.getTimeInMillis() < now) {
    currentCalendar.add(Calendar.DAY_OF_MONTH, 7);
}

(如果当前星期几与解析的那一天相同,你应该检查你想要的行为......)

顺便说一句,我个人建议使用Joda Time来处理Java中所有严肃的日期和时间。这是一个更好的API。