2013-11-08 29 views
0

Я очищаю веб-страницу, которая содержит даты в этом формате: «8 ноября 2013 года». После того, как я верну даты, они организованы в неупорядоченный массив строк. То, что я хочу сделать, - это каким-то образом преобразовать эти строки в простой формат даты, например, yyyy-MM-dd, чтобы я мог их заказать и использовать для взаимодействия с календарем?Преобразование даты строки в простой формат даты

+0

получит ли эта нить начала: http://stackoverflow.com/questions/4011075/how-do-you-format-the-day-of-the-month-to-say- 11-я-21-я-23-я-ява – EdgeCase

+0

Да, если бы я сделал это таким образом, мне пришлось бы написать целый класс для синтаксического анализа и форматирования даты строки по своему вкусу !? Очень много времени, но кажется, что это может быть мой единственный выбор? –

ответ

1

Как о чем-то вроде этого?

private String dateLongStringConvert(String dateLongString) { 

    // split long date string into string array 
    String[] dateArray = dateLongString.split(" "); 

    // get day of month as an integer (strip out non numeric chars) 
    int dayOfMonth = Integer.parseInt(dateArray[0].replaceAll("\\D+", "")); 

    // Convert month string to number 
    String month = ""; 
    switch (dateArray[1]) { 
     case "January": 
      month = "01"; 
     case "Feburary": 
      month = "02";    
     case "March": 
      month = "03";    
     case "April": 
      month = "04";    
     case "May": 
      month = "05";    
     case "June": 
      month = "06";    
     case "July": 
      month = "07";    
     case "August": 
      month = "08";   
      case "September": 
      month = "09";   
     case "October": 
      month = "10";    
     case "Novemember": 
      month = "11"; 
     case "December": 
      month = "12";     
    } 
    // return formated date string 
    return dateArray[2] + "-" + month + "-" + String.format("%02d", dayOfMonth); 
} 
+0

Это сработало, но мне пришлось внести пару изменений. Мне пришлось удалить переключатель (String), потому что оператор switch на объектах String - это новая функция, введенная в Java 1.7. К сожалению, для Android требуется версия 1.6 или 1.5. Вместо этого я использовал несколько операторов if else. Также при разбиении строки в массив пришлось разделить («\\ s +»), чтобы идентифицировать пробелы. Большое спасибо за вашу помощь! –

0

Правильный способ сделать это - использовать парсер, например, Stanford Temporal Tagger, и определить даты из текста. Хороший GUI (http://nlp.stanford.edu:8080/sutime/process) обеспечивается командой, чтобы оценить инструмент на

+0

Ссылка не действительна? –

1
String inputDate = "8th November 2013"; 
inputDate = inputDate.replaceAll("([0-9])st|nd|rd|th|\\.", "$1"); // get rid of the th. 
Date date = new SimpleDateFormat("d MMM y", Locale.ENGLISH).parse(inputDate); // parse input date 
String outputDate = new SimpleDateFormat("yyyy-MM-dd").format(date); // format to output date 
+0

Пробовал это, и он удаляет штраф, но когда он пытается отформатировать результат, я получаю следующее исключение: «Непревзойденная дата:« 8 ноября 2013 » –

Смежные вопросы