2011-11-01 102 views
0

我想按用户解析给定日期,但使用特定格式:星期的星期几。如何仅使用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

我该怎么办?

回答

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。

+0

如果OP要未来的日子,然后他可以检查当天对过去的一天,如果它通过本周,然后加1周。 –

+0

@JigarJoshi:是的,这就是我的意思。我会澄清我的评论。 –

+0

你可以发表一个关于你如何处理JodaTime的例子吗?我不明白我该怎么做。谢谢:) –

3

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

+0

这将不会设置未来的星期五总是 –

+0

是的,应额外支票作出 – Bozho

相关问题