Kotlin извлекает время из даты

У меня есть дата в таком формате: 2027-02-14T14:20:00.000

Я хотел бы взять из него часы и минуты, как в этом случае: 14:20

Я пытался сделать что-то вроде этого:

val firstDate = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).parse("2027-02-14T14:20:00.000")
val firstTime = SimpleDateFormat("H:mm").format(firstDate)

но у меня вылет java.text.ParseException: Unparseable date

Как взять часы и минуты из этой строки?

Где в вашем шаблоне 'T', а где доли секунд? Все они находятся в String, который вы пытаетесь разобрать... Кстати, вам обязательно использовать такой старый/устаревший API? Почему не java.time или kotlinx.datetime?

deHaar 17.05.2022 14:57

в дополнение к тому, что деХаар сказал о несоответствии вашего шаблона, я не совсем уверен, что вам вообще нужно делать синтаксический анализ здесь, вы можете просто избежать некоторых манипуляций со строками, судя по всему, то, что вы хотите, всегда сидит после T и до второго :

a_local_nobody 17.05.2022 15:00

как обрабатывать T в моем шаблоне?

discCard 17.05.2022 15:01

Добавление T, заключенного в одинарные кавычки, может сработать (но я не уверен в этом, когда дело доходит до SimpleDateFormat. java.time имеет встроенные средства форматирования, которые автоматически обрабатывают String, отформатированные как ваш пример (формат ISO).

deHaar 17.05.2022 15:03

Я настоятельно рекомендую вам не использовать SimpleDateFormat и Date. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого используйте LocalDateTime и DateTimeFormatter, оба из java.time, современный API даты и времени Java.

Ole V.V. 17.05.2022 17:16
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
5
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ОДИН ИЗ РЕКОМЕНДУЕМЫХ СПОСОБОВ

Если вы можете использовать java.time, вот пример с комментариями:

import java.time.LocalDateTime
import java.time.LocalDate
import java.time.format.DateTimeFormatter

fun main() {
    // example String
    val input = "2027-02-14T14:20:00.000"
    // directly parse it to a LocalDateTime
    val localDateTime = LocalDateTime.parse(input)
    // print the (intermediate!) result
    println(localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
    // then extract the date part
    val localDate = localDateTime.toLocalDate()
    // print that
    println(localDate)
}

Это выводит 2 значения: проанализированное промежуточное LocalDateTime и извлеченное LocalDate (последнее просто неявно вызывает свой метод toString()):

2027-02-14T14:20:00
2027-02-14

НЕ РЕКОМЕНДУЕТСЯ, но возможно:

По-прежнему используйте устаревший API (может быть необходимо, когда речь идет о большом количестве устаревшего кода, который, я сомневаюсь, вы найдете написанным на Kotlin):

import java.text.SimpleDateFormat

fun main() {
    val firstDate = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
                            .parse("2027-02-14T14:20:00.000")
    val firstTime = SimpleDateFormat("yyyy-MM-dd").format(firstDate)
    println(firstTime)
}

Выход:

2027-02-14

Другие вопросы по теме