Как проанализировать два разных типа форматов строки на дату?

1

Я пытаюсь отформатировать дату, подобную этой

август 2011 года и август 24,2011

Я использую это, чтобы разобрать их сейчас.

//set the pattern here to look like the pattern you are expecting in your 'Date' variable
                    SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd,yyyy");

 //Get the release date
                     releaseDate = postIt.next().text();

                     Date realDate = null;
                    try {
                        realDate = sdf.parse(releaseDate);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 

                     int i = 0;
                    String gameDate =  realDate.toString();

Я получаю следующую ошибку в моей отладке.

08-26 22:02:44.571: WARN/System.err(29218): java.text.ParseException: Unparseable date: "August 2011" (at offset 11)
08-26 22:02:44.571: WARN/System.err(29218):     at java.text.DateFormat.parse(DateFormat.java:626)

Как я могу это сделать, чтобы прочитать оба формата?

РЕДАКТИРОВАТЬ:

Вот как он анализирует это сейчас...

08-27 00:10:48.951: VERBOSE/Dates(30449): August 2011  

Если в августе 2011 года

08-27 00:10:48.951: ERROR/FormattedDATE(30449): Mon Aug 01 00:00:00 EDT 2011

Все они сидят на этой же дате.

Теги:
simpledateformat

1 ответ

2
Лучший ответ

Я думаю, вам понадобится строка формата для каждого, например,

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatDriver {
    public static void main( String[] args ) throws Exception {

        SimpleDateFormat dayMonthYearFormatter = new SimpleDateFormat("MMMM dd,yyyy");
        SimpleDateFormat monthYearFormatter = new SimpleDateFormat("MMMM yyyy");                

        //String date1 = "August 11,2005";
        String date1 = "August 2005";
        Date realDate = null;

        try {
            realDate = dayMonthYearFormatter.parse(date1);
            System.out.println("parsed date -> " + realDate);
        } catch (ParseException e) {                    
            // fall back on other formatter
            try {               
                realDate = monthYearFormatter.parse(date1);
                System.out.println("parsed date -> " + realDate);
            } catch(ParseException e2) {
                System.err.println("could not parse" + date1);              
            }
        }                          
    }        
}

Я бы порекомендовал вам проверить http://joda-time.sourceforge.net

Это всего лишь идея, не уверен, что я действительно ее использую, но токенизатор может быть использован для определения типа даты, 2 токенов за "11 августа 2005 года", 1 за "август 2005". Поэтому используйте один форматтер, если количество токенов равно 1, другой форматтер, если количество токенов равно 2, например

    int tokenCount = 0;
    StringTokenizer tokenizer = new StringTokenizer("August 11, 2005", ",");
    while(tokenizer.hasMoreTokens()) {
        tokenizer.nextToken();
        tokenCount++;
    }
    System.out.println("token count -> " + tokenCount);
  • 0
    @adatapost спасибо за исправление
  • 0
    Как я узнаю, будет ли это 21 августа 2011 года или только август 2011 года? На основании списка?
Показать ещё 22 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню