2016-03-09 2 views
1

Структуры моего приложения является FragmentTabHost, который содержит Fragment, внутри что Fragment является ViewPager, который позволяет пользователю прокручивать ребенок фрагменты.Android: SimpleDateFormat печатает дубликаты на несколько фрагментах

(FragmentTabHost -> Fragment -> ViewPager -> Fragment) 

В конечном фрагменте должна отображаться дата обработки данных.

Вот код, я использую для создания даты:

String format = "MMMM F"; 
SimpleDateFormat formatter = new SimpleDateFormat(format); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
String dateString = (formatter.format(item.getDate("date")) + suffixForDayInDate(item.getDate("date"))); 
Log.d("RAW DATE", item.getDate("date").toString()); 
Log.d("AFTER FORMATTING", formatter.format(item.getDate("date"))); 

Выход:

D/RAW DATE: Mon Mar 07 17:00:00 MST 2016 
D/AFTER FORMATTING: March 2 
D/RAW DATE: Sun Mar 06 17:00:00 MST 2016 
D/AFTER FORMATTING: March 1 
D/RAW DATE: Sat Mar 05 17:00:00 MST 2016 
D/AFTER FORMATTING: March 1 
D/RAW DATE: Fri Mar 04 17:00:00 MST 2016 
D/AFTER FORMATTING: March 1 

Скажите, пожалуйста, кто имеет ключ здесь.

+0

Хорошо, так что вы ожидали? (И почему вы вызываете 'item.getDate (« дата ») четыре раза? Ваш код будет более ясным, если вы извлечете локальную переменную ...) –

+0

Обратите внимание, что из-за использования UTC ваше первое значение эффективно во вторник 8 марта, который действительно является вторым вторником в марте, поэтому «2 марта». –

+0

Это * также * непонятно, что все описание фрагмента связано с чем угодно. Вы действительно спрашиваете: «Почему SimpleDateFormat производит этот вывод для этого ввода?» или что-то другое? На данный момент весь вопрос непонятен. –

ответ

1

В приведенной ниже строке вы используете неправильный формат для синтаксического анализа вашей даты. Он должен быть dd вместо F.

String format = "MMMM F"; /* Correction Required */ 

С JAVA Docs:

F День недели в месяц

d день в месяц

Вы должны исправить это следующим образом:

String format = "MMMM dd"; 

Вот пример кода фрагмент:

public static void main (String[] args) 
{ 
    SimpleDateFormat parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy"); 
    parser.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date dt = parser.parse("Mon Mar 07 17:00:00 MST 2016"); 

    SimpleDateFormat formatter = new SimpleDateFormat("MMMM dd"); 
    String date = formatter.format(dt); 
    System.out.println(date); 
} 

Вход:

Mon Mar 07 17:00:00 MST 2016 

Выход:

March 08 
+0

Только когда я прочитал это, я заметил свою проблему. После второго взгляда на документы андроида я понял F = день недели в месяц, то, что я действительно хотел использовать, - «d» (день месяца), а не «F». Очень глупая ошибка с моей стороны. Благодаря! – Frogger

+0

@Frogger Ваше добро пожаловать! Я рад, что это было полезно. – user2004685

+0

OP уже имеет * объект 'Date'. Нет никаких признаков того, что требуется дополнительный синтаксический анализ.Все это неправильно, это формат OP, который вы исправили, но не упомянули в ответе. –

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