Я пытаюсь отформатировать дату, подобную этой
август 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
Все они сидят на этой же дате.
Я думаю, вам понадобится строка формата для каждого, например,
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);