我想按用户解析给定日期,但使用特定格式:星期的日期名称。
到目前为止,这就是我所做的:
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
)返回给我
我该怎么办?
答案 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。