2015-08-02 1 views
0

Мое приложение запрашивает строку SQLite DateTime, и я пытаюсь написать один метод, чем я могу использовать в своем приложении, чтобы временные метки DateTime были отформатированы последовательно. До сих пор у меня есть,Метод Android для последовательного форматирования DateTime в приложении

public class DateTimeUtils { 

    public static String formatDueDate(String queryResponse) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss z", Locale.US); 
     Date result = new Date(); 
     try { 
      result = sdf.parse(queryResponse); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return result.toString(); 
    } 
} 

Что используется в таких ситуациях, как

taskViewHolder.mDue.setText(formatDueDate(task.getDue().toString())); 

Я хотел бы выход выглядеть June 27, 20015, 5:30PM

Необработанные DateTime Струнный принимает вид: 2015-08-10T17:28:00.000-04:00

В настоящее время мои проблемы имеют неверный формат временной метки, а вместо этого выглядит как Sun Aug 02 17:29:03 EDT 2015, а вместо этого f анализируя введенную временную метку, просто возвращает текущее время и время.

Я считаю, что это потому, что мое форматирование фактически бросает исключение, и я просто возвращаю текущий объект Date(). Что я должен изменить, чтобы строка datetime правильно анализировалась?

ответ

0

Ну, поскольку вы создаете объект Date за пределами блока try, вы правы, если есть ошибка синтаксического анализа, текущая дата вернется. SimpleDateFormat делает это для вас в методе анализа. Вы могли бы уменьшить возможность возвращения текущей даты, присвоив переменной Date переменной null вместо создания экземпляра нового объекта.

0

Если у вас уже есть правильный класс Date, возможно, вы можете создать свой специальный формат с помощью класса Calendar и класса StringBuilder.

Как показано ниже:

 String[] monthString = new String[12]; 
     if (monthString[0] == null) { 
      // Get month string by android locale 
      // The String will like Jule or May ... 
      Map<String, Integer> months = Calendar.getInstance().getDisplayNames(Calendar.MONTH, Calendar.LONG, getResources().getConfiguration().locale); 
      for (int i = 0; i < 12; i++) { 
       for (String month : months.keySet()) { 
        if (i == months.get(month).intValue()) { 
         monthString[i] = month; 
         months.remove(month); 
         break; 
        } 
       } 
      } 
     } 
     Calendar calendar=Calendar.getInstance(); 
     calendar.setTime(result); 
     StringBuilder sb=new StringBuilder(); 
     sb.append(monthString[calendar.get(Calendar.MONTH)]); 
     //spec your format string... 

Надеется, что это может помочь вам.

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