2012-02-06 2 views
1

Я это как строка 02/06/2012 1:25 PM ESTSimpleDateFormat, нужно текстуальное месяц

Я хочу использовать SimpleDateFormat вернуться «Feb» из этих данных

Вот что я пытался

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
      String month = ""; 
      try { 
       month = gottenDate.format(gottenDate.parse("02/06/2012 1:25 PM EST")); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

К сожалению gottenDate.parse("02/06/2012 1:25 PM EST") получает исключение синтаксического анализа, когда документы SimpleDateFormat говорят, что он должен работать.

Если я делаю SimpleDateFormat gottenDate = new SimpleDateFormat("MM"); с двумя M вместо 3, он возвращает «02» для меня, как и ожидалось. В документах говорится, что 3 или более M должны возвращать текстовый месяц. Почему этого не происходит? И да, к настоящему моменту я мог бы создать массив строк в несколько месяцев и сопоставить их с числовым месяцем SDF для меня, но мне любопытно.

Как мне заставить его работать на меня, спасибо!

ответ

2

Исключение, как ожидается, в вашем случае:

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
gottenDate.parse("02/06/2012 1:25 PM EST"); 

«gottenDate» настроен разобрать строку, если она соответствует «МММ» рисунок. Должно быть выполнено следующее:

SimpleDateFormat gottenDate = new SimpleDateFormat("MMM"); 
gottenDate.parse("Feb"); 

Надеюсь, вы увидите, что здесь происходит.

+0

Я вижу сейчас. К сожалению, дата, которую я получаю, фактически передается этому методу, и ее формат приходит как «02/06/2012 13:25 EST», думаю, я просто сделаю соответствующий массив месяцев, чтобы рассказать ему, что «02 'означает – CQM

+1

Не обязательно. Вы можете сделать это как двухэтапный процесс: 1) * parse * string, используя один экземпляр SimpleDateFormat с известным шаблоном; 2) после того, как вы получите объект Date - * format *, используя другой экземпляр SimpleDateFormat, такой как новый SimpleDateFormat («MMM»). –

0

Вам нужен формат для синтаксического анализа даты: MM/dd/yyyy, и после того, как у вас есть объект Date из этого формата даты, вам понадобится второй: MMM, чтобы отформатировать дату так, как вы хотите.

Форматирование с MM даст вам месяц на две цифры, и разбор с MMM будет ожидать сокращенная текстуальное месяц, и не будет разбирать 02.

0

Вам нужно два отдельных экземпляра SimpeDateFormat с соответствующими строками формата, чтобы проанализировать дату источника и отформатировать его обратно в короткую месячную форму. Ваш экземпляр формата не может анализировать полную дату, поскольку он ожидает только месяц в указанной строке.

SimpleDateFormat monthDate = new SimpleDateFormat("MMM"); 
SimpleDateFormat gottenDate = new SimpleDateFormat("dd/MM/yyyy h:mm a z"); 
String month = ""; 
try { 
    month = monthDate .format(gottenDate.parse("02/06/2012 1:25 PM EST")); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Не уверен в отношении формата исходной строки, сложные строковые строки немного сложны.

0

Это код, который получит MonthName вам:

public String getMonthName(String dtstr, String fmt) throws ParseException { 
    SimpleDateFormat gottenDate = new SimpleDateFormat(fmt); 
    SimpleDateFormat month = new SimpleDateFormat("MMM"); 
    Date dt = gottenDate.parse(dtstr); 
    return month.format(dt); 
} 

Зов это следующим образом:

System.out.println(getMonthName("01/06/2012 1:25 PM EST"), "M/d/y"); 

ВЫВОД:

Feb 
0

Ну, а другие были быстрее отвечая, но я думаю, что это будет делать то, что вы хотите.

String date_str = "02/06/2012 1:25 PM EST"; 
SimpleDateFormat in_format = new SimpleDateFormat("MM/dd/yyyy h:mm aa zzz"); 
SimpleDateFormat out_format = new SimpleDateFormat("MMM"); 
Date my_date = in_format.parse(date_str); 
String out_str = out_format.format(my_date); 
System.out.println(out_str); // Prints Feb 

Даты и время могут усложняться из-за того, что люди в разное время записи.Лучший справочник я нашел для понимания всех этого здесь: http://www.odi.ch/prog/design/datetime.php

0

Просто, чтобы обеспечить альтернативное решение, так как ваши рабочие места, чтобы «извлечь» месяц из даты, я думаю Calendar лучше всего подходит для этой работы.

// Construct a Date object 
final DateFormat df = new SimpleDateFormat("M/d/y"); 
final Date originalDate = df.parse("02/06/2012 1:25 PM EST"); 

final Calendar c = Calendar.getInstance(); 
c.setTime(originalDate); // set the calendar Date 
// Extract the month 
String month = c.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US); 
System.out.println(month);