Как разобрать только день с помощью SimpleDateFormat - PullRequest
0 голосов
/ 01 ноября 2011

Я бы хотел проанализировать данную дату по пользователю, но в определенном формате: название дня недели.

Пока вот что я сделал:

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 ]

3 голосов
/ 01 ноября 2011

Разберите только день, поместите его в 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.

3 голосов
/ 01 ноября 2011

Получите Calendar.getInstance() и просто установите DAY_OF_WEEK в значение format.getCalendar(). Вам нужно будет проверить, если текущая дата недели после пятницы. В этом случае - увеличить неделю.

...