Как мне разобрать дату, когда у меня есть только название дня? - PullRequest
0 голосов
/ 27 марта 2012

Учитывая строку, которая является просто днем, например, «Чт» или «Четверг», как бы я получил объект java.util.Calendar, где строка дня представляет собой ближайшую строку на сегодняшний день.Другими словами, сегодня понедельник, 26.03.29012, поэтому, если бы строка была «Чт», я бы хотел сформировать дату, которая представляет «29.03.2012».Если передана строка «Mon», а мы в понедельник, я бы хотел сегодняшнюю дату.В этом примере «26.03.2012».

Я пробовал это ...

            final DateFormat formatter = new SimpleDateFormat("EEE");
            java.util.Date date = (Date) formatter.parse(dayOfWeekStr);
            final Calendar now = Calendar.getInstance();
            dateCal.set(Calendar.YEAR, now.get(Calendar.YEAR));
            dateCal.set(Calendar.MONTH, now.get(Calendar.MONTH));
            dateCal.setTime(date);  

, но это не работает.Как только я установлю дату, год и месяц будут равны 1970, январь.

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Вы почти у цели.Просто положите .setTime(..) поверх остальных.В настоящее время вы отменяете изменения ГОДА и МЕСЯЦА, устанавливая время.

Как заметил Кевин, это может работать не во всех случаях.По этой причине я бы посоветовал вам использовать другой подход: получить только DAY_OF_WEEK из календаря на основе проанализированной даты и установить его на now.Конечно, вы должны позаботиться об изменении недели, если вам нужно.

0 голосов
/ 31 марта 2012

Я закончил с

public static Calendar getNearestDateFromDayString(final String dayOfWeekStr,
        final Calendar startingDay) throws ParseException {
    final DateFormat formatter = new SimpleDateFormat("EEE");
    final java.util.Date date = (Date) formatter.parse(dayOfWeekStr);
    final Calendar result = Calendar.getInstance();
    result.setTime(date);
    result.set(Calendar.YEAR, startingDay.get(Calendar.YEAR));
    result.set(Calendar.MONTH, startingDay.get(Calendar.MONTH));
    result.set(Calendar.HOUR, startingDay.get(Calendar.HOUR));
    result.set(Calendar.MINUTE, startingDay.get(Calendar.MINUTE));
    result.set(Calendar.SECOND, 0);
    java.util.Date today = new java.util.Date();
    while (result.getTimeInMillis() <= today.getTime()) { 
        result.add(Calendar.DATE, 7);
    }   // while
    return result;
} // getNearestDateFromDayString

Если у кого-то есть более краткое решение, я приму это вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...