Java 如何使用SimpleDataFormat只解析一天

Java 如何使用SimpleDataFormat只解析一天,java,parsing,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);

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

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

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
我希望它能在未来的星期五还给我(在我们的timelapse中,
2011年11月4日


我该怎么办?

获取一个
日历。getInstance()
并simpyl将
周中的天设置为
格式的值。getCalendar()
。您需要检查一周的当前日期是否在星期五之后。在这种情况下-增加周数。

获取一个
日历。getInstance()
然后simpyl将
周数的
天设置为
格式的值。getCalendar()
。您需要检查一周的当前日期是否在星期五之后。在这种情况下-增加一周。

只解析一天,将其放入
日历中
,这样您就可以找到一周中的哪一天,然后根据当前日期创建另一个日历,这样您就可以设置一周中的哪一天:

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);
}
//假设我们已经完成了所有的解析
int dayOfWeek=parsedCalendar.get(Calendar.DAY,OF WEEK);
long now=System.currentTimeMillis();
Calendar currentCalendar=Calendar.getInstance();
currentCalendar.setTimeInMillis(现在);
currentCalendar.set(Calendar.DAY\u OF周,dayOfWeek);
if(currentCalendar.getTimeInMillis()
(如果一周中的当前日期与解析的日期相同,则应检查所需的行为…)


顺便说一句,我个人建议在Java中使用所有重要的日期和时间工作。这是一个更好的API。

只解析一天,将其放入
日历中,这样您就可以找到一周中的哪一天,然后根据当前日期创建另一个日历,这样您就可以设置一周中的哪一天:

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);
}
//假设我们已经完成了所有的解析
int dayOfWeek=parsedCalendar.get(Calendar.DAY,OF WEEK);
long now=System.currentTimeMillis();
Calendar currentCalendar=Calendar.getInstance();
currentCalendar.setTimeInMillis(现在);
currentCalendar.set(Calendar.DAY\u OF周,dayOfWeek);
if(currentCalendar.getTimeInMillis()
(如果一周中的当前日期与解析的日期相同,则应检查所需的行为…)


顺便说一句,我个人建议在Java中使用所有重要的日期和时间工作。这是一个更好的API。

它不会永远设置未来的星期五。它不会永远设置未来的星期五。如果OP想要未来的一天,那么他可以对照过去的一天检查当前的一天,如果这一天过去了,那么就在一周中添加1。@JigarJoshi:是的,这就是我的意思。我会澄清我的评论。你能举个例子说明你会如何使用JodaTime吗?我不知道我怎么能做到。谢谢:)@cx42net:在Joda时代,哪一点会给你带来麻烦
LocalDate.withDayOfWeek
LocalDate.plusWeeks
将是解析后的相关调用。。。解析本身有问题吗?它似乎与日历一起工作,那么我需要使用JodaTime吗?(我从未使用过它,这就是为什么我不知道如何继续)如果OP想要未来的一天,那么他可以对照过去的一天检查当前的一天,如果这一天过去了,那么在本周加上1。@JigarJoshi:是的,这就是我的意思。我会澄清我的评论。你能举个例子说明你会如何使用JodaTime吗?我不知道我怎么能做到。谢谢:)@cx42net:在Joda时代,哪一点会给你带来麻烦
LocalDate.withDayOfWeek
LocalDate.plusWeeks
将是解析后的相关调用。。。解析本身有问题吗?它似乎与日历一起工作,那么我需要使用JodaTime吗?(我从未使用过,这就是我不知道如何继续的原因)