Как я могу отобразить TextView в ListView в формате «12:30 PM»? - PullRequest
0 голосов
/ 02 июня 2019

Я хочу преобразовать эту строку в DateFormat.По моему ListView выглядит немного странно.

Вот код

        String nameb= jo.getString("name");
        String dateb= jo.getString("date");
        String hourb= jo.getString("hour");


        HashMap<String, String> item = new HashMap<>();
        item.put("name", nameb);
        item.put("date", dateb);
        item.put("hour",hourb);

        list.add(item);
    }
} catch (JSONException e) {
    e.printStackTrace();
}


adapter = new SimpleAdapter(this,list,R.layout.activity_randevular,
new String[]{"name","date","hour"},new int[]{R.id.name,R.id.date,R.id.hour});


listView.setAdapter(adapter);
loading.dismiss();

Сначала у меня есть несколько строк в GoogleSheet, и одна из них указывает на час, как "14:00",На GoogleSheet это выглядит идеально, но в ListView выглядит так: «2001-07-04T12: 08: 56.235-07: 00» и так далее.Я хочу, чтобы он состоял из Часа и Минуты.

Ответы [ 2 ]

2 голосов
/ 02 июня 2019

ТЛ; др

Используйте современные java.time классы OffsetDateTime, LocalTime и DateTimeFormatter и локализуйте, используя Locale.

OffsetDateTime                                // Represent a moment as a date and time-of-day with an offset of hours-minutes-seconds ahead of or behind UTC.
.parse( "2001-07-04T12:08:56.235-07:00" )     // Standard ISO 8601 strings can be parsed directly, without you needing to specify a formatting pattern. Returns an `OffsetDateTime` object.
.toLocalTime()                                // Extract just the time-of-day portion, omitting the date and the offset-from-UTC. Returns a `LocalTime` object.
.format(                                      // Generate text to represent the time-of-day value held in this `LocalTime` object.
    DateTimeFormatter                         // Class to control generate text from a date-time object.
    .ofLocalizedTime(                         // Ask `DateTimeFormatter` to automatically localize the presentation formatting of the text.
        FormatStyle.SHORT                     // Specify how long or abbreviated the text should be.
    )                                         // Returns a `DateTimeFormatter` object.
    .withLocale(                              // Specify the locale to use in localization, to determine (a) the human language to use in translation, and (b) the cultural norms to decide issues such as capitalization, abbreviation, punctuation, order of elements. 
        Locale.US
    )                                         // Returns another `DateTimeFormatter` object. The java.time class use the immutable objects pattern, returning a fresh object base on the original’s values rather than changing (“mutating”) the original.
)                                             // Returns a `String`.

12: 08 PM

Подробнее

вот так "2001-07-04T12: 08: 56.235-07: 00"

Этот текст на мгновение в стандартном формате ISO 8601 .

Современные java.time классы по умолчанию используют эти стандартные форматы при разборе / генерации текста.

OffsetDateTime odt = OffsetDateTime.parse( "2001-07-04T12:08:56.235-07:00" ) ;

Я хочу, чтобы оно состояло из Часа и Минуты.

Хотите ли вы показать время в том же смещении от UTC ? Это смещение -07:00, которое на семь часов отстает от UTC, возможно, относится к часовому поясу на западном побережье Северной Америки, например America/Vancouver или America/Los_Angeles, как вы можете видеть здесь .

Если это так, извлеките время суток.

LocalTime lt = odt.toLocalTime() ;

Затем сгенерируйте строку, представляющую значение этого LocalTime объекта. Как правило, лучше всего автоматически разрешить java.time .

Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale ) ;

String output = lt.format( f );

12: 08 PM


О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

0 голосов
/ 02 июня 2019

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

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
SimpleDateFormat outputFormat = new SimpleDateFormat("h:mm a");

try {
    String nameb= jo.getString("name");
    String dateb= jo.getString("date");
    String hourb= jo.getString("hour");

    Date date = inputFormat.parse(hourb);

    HashMap<String, String> item = new HashMap<>();
    item.put("name", nameb);
    item.put("date", dateb);
    item.put("hour", outputFormat.format(date));

    list.add(item);
} catch (ParseException e) {
    e.printStackTrace();
} catch (JSONException e) {
    e.printStackTrace();
}
...