Я использую API, который выдает время начала в формате 019-01-04T18:30:00.000Z, так как же мне извлечь только время из этого формата времени начала в java?
Как вынести только время с 019-01-04T18:30:00.000Z в java
Ответы (2)
java.time через дешугаринг
Используйте java.time, современный API даты и времени Java, для своей работы. Я могу легко дать вам код. Надеюсь, вы не будете разочарованы результатом.
Ваша строка определяет момент времени. В этот момент время суток отличается от часового пояса к часовому поясу. Поэтому вам нужно решить, в каком часовом поясе вы хотите время. Например:
ZoneId zone = ZoneId.of("Asia/Kolkata");
String startTimeString = "2019-01-04T18:30:00.000Z";
ZonedDateTime dateTime = Instant.parse(startTimeString).atZone(zone);
System.out.println("Date and time: " + dateTime);
LocalTime time = dateTime.toLocalTime();
System.out.println("Time: " + time);
Вывод:
Date and time: 2019-01-05T00:00+05:30[Asia/Kolkata] Time: 00:00
Ваш пример строки обозначает начало дня в Индии. Конечный Z
в полученной строке говорит нам о том, что строка указана в формате UTC, что является стандартом для обмена данными о дате и времени, особенно между часовыми поясами. Вызов atZone()
преобразуется в ваш часовой пояс.
Если вы действительно получаете строку без первой цифры, 2
, сначала посмотрите, можно ли исправить эту ошибку. Если вы не можете, просто добавьте 2
самостоятельно. Если вы не считаете возможным получение времени до 2000 года (или после 2999 года).
Я разбираю вашу строку без указания какого-либо средства форматирования. Я могу это сделать, потому что ваша строка на мгновение находится в формате по умолчанию. Формат известен как ISO 8601.
Вопрос. Разве для java.time не требуется Android API уровня 26?
java.time прекрасно работает как на старых, так и на новых устройствах Android. Просто требуется как минимум Java 6.
- В Java 8 и более поздних версиях, а также на более новых устройствах Android (начиная с уровня API 26) современный API встроен.
- В версиях Java 6 и 7, отличных от Android, используйте ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
- На старых версиях Android используйте либо дешугаринг, либо версию ThreeTen Backport для Android. Он называется ThreeTenABP. В последнем случае убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки
- Руководство по Oracle: Date Time, объясняющее, как использовать java.time.
- Статья в Википедии: ISO 8601
-
Запрос спецификации Java (JSR) 310, где впервые был описан
java.time
. -
Проект ThreeTen Backport, бэкпорт
java.time
для Java 6 и 7 (ThreeTen для JSR-310). - Java 8+ API доступны через дешугаринг
- ThreeTenABP, версия ThreeTen Backport для Android
- Вопрос: Как использовать ThreeTenABP в Android Project, с очень подробным объяснением.
Ваша строка даты и времени неверна.
Вам необходимо преобразовать строку даты и времени в объект даты и времени, из которого можно извлечь часть времени.
Ниже приведено решение, использующее java.time
, современный API даты и времени:
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "019-01-04T18:30:00.000Z";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d'T'H:m:s.SSSX", Locale.ENGLISH);
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, dtfInput);
LocalTime time = odt.toLocalTime();
System.out.println(time);
// As a string
String strTime = time.toString();
System.out.println(strTime);
// As a string in a custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("HH:mm:ss.SSS", Locale.ENGLISH);
String formattedTime = time.format(dtfOutput);
System.out.println(formattedTime);
}
}
Вывод:
18:30
18:30
18:30:00.000
Learn more about the modern Date-Time API* from Trail: Date Time.
* По любой причине, если вам нужно придерживаться Java 6 или Java 7, вы можете использовать threeten-backport <3425555555252525272.тир. функции java.time на Java 6 и 7. Если вы работаете над проектом Android и ваш уровень Android API по-прежнему не соответствует Java-8, проверьте Java 8+ API, доступные через desugaring и Как использовать ThreeTenABP в Android Project.
Дай угадаю, не хватает
2
? Должно было быть2019-01-04T18:30:00.000Z
? Примерно два с половиной года назад.Ваша строка находится в формате UTC (обозначается буквой Z в конце). Вы хотите, чтобы время суток было в формате UTC, в вашем часовом поясе или в другом часовом поясе? Который из? В вашем профиле указано, что вы находитесь в Индии, поэтому время в вашем часовом поясе будет
00:00:00
(совпадений почти нет).Добро пожаловать в Stack Overflow. Пожалуйста, узнайте, что вы должны искать, прежде чем задавать вопрос здесь, и когда вы публикуете вопрос, сообщите нам, что выдал ваш поиск, и укажите, почему он не помог решить вашу проблему. Это делается для вашего же блага, поскольку (1) так вы часто найдете лучший ответ быстрее (2) это позволяет нам давать более точные и целенаправленные ответы. Я проголосовал против, потому что в вашем вопросе не задокументировано никаких исследований (и я серьезно удивляюсь, почему кто-то проголосовал за).
@ОлеВ.В. извините за неудобства, буду помнить об этом в будущем, а также в контексте. Я делаю приложение для Android в java, которое использует Rest API, и оно дает дату/время в этом формате, т.е. "2021-08-24T14:35 :00.000Z" Мне удалось извлечь дд/мм/гг из этой строки с помощью класса DateTimeFormatter, но мне не удалось извлечь время из этой строки, я даже искал решение на другом сайте, но не смог получить последняя обновленная версия кодов. ССЫЛКА на API:-kontests.net/api