java - 如何使用 SimpleDateFormat 仅解析日期

标签 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

我希望它能在未来的周五返回给我(在我们的间隔拍摄中,2011 年 11 月 4 日)

我该怎么办?

最佳答案

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

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

请注意,这不一定会将其置于 future - 它会将这一天设置在本周内。因此,如果您想确保它确实是在未来,您可能需要在之后添加一周:

// 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。

关于java - 如何使用 SimpleDateFormat 仅解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7964992/

相关文章:

java - 如何使用一行代码合并 set use java stream

parsing - 如何使用antlr4中的Listener方法获取解析器的内容?

php - MySQL:返回特定定界符和下一个非唯一定界符之间的 SUBSTR

java - 解析有效日期时出现 ParseException

java - 使用 HttpServletRequest#getDateHeader() 解析 RFC1123 日期时出现异常

java - 空指针错误

java - spring tx :advice and spring aop pointcut 之间的区别

java - Spring JPA如何获取列的AVG

C++ 将 mac id 字符串转换为 uint8_t 数组

Java SimpleDateFormat 时间异常