Преобразование строк во время (только чч:мм)

Я хочу, чтобы моя строка «10:10» была преобразована во время в формате чч: мм вместо мм/дд/гггг чч:мм:сс аа

Date date;
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("hh:mm");
try 
{
    date = sdf.parse(a.getString("time").toString());
    Log.d(TAG, "onCreate: "+date);
    Log.d(TAG, "onCreate: "+a.getString("time"));
}
 catch (ParseException e) {
    e.printStackTrace();
}

Но я получаю это в своем логарифме

D/MTAG: onCreate: Thu Jan 01 10:00:00 GMT+05:00 1970
D/MTAG: onCreate: 10:00

person Omar Saleem    schedule 27.12.2017    source источник
comment
Возможный дубликат времени анализа формата чч:мм:сс   -  person vinS    schedule 27.12.2017
comment
Я думаю, вы неправильно понимаете Date и DateFormat. Если вы распечатываете объект даты без какого-либо средства форматирования даты, он будет отображать полную строку даты.   -  person anhtuannd    schedule 27.12.2017
comment
Класс LocalTime JSR-310 (современный API даты и времени Java, также известный как java.time) создан для вас! Вы можете использовать JSR-310 на Android через ThreeTenABP, см. Как использовать ThreeTenABP в Android Проект.   -  person Ole V.V.    schedule 27.12.2017
comment
Кроме того, SimpleDateFormat давно устарел и заведомо проблематичен, а с современным API даты и времени работать намного приятнее. Я должен сказать, что это безопасная ставка.   -  person Ole V.V.    schedule 27.12.2017
comment
Date не может иметь формат, он всегда печатается как Thu Jan 01 10:00:00 GMT+05:00 1970 (его метод toString создает этот формат). Любой формат всегда вне Date и в String. См. Все о java.util.Date.   -  person Ole V.V.    schedule 27.12.2017
comment
Возможный дубликат формата изменения даты Java   -  person Ole V.V.    schedule 27.12.2017


Ответы (3)


    String timeString = "10:10";
    LocalTime time = LocalTime.parse(timeString);
    System.out.println(time);

Это печатает

10:10

Впрочем, я немного лукавлю. Как я прочитал ваш вопрос, вы запросили объект даты и времени с форматом HH:mm в нем. Ни объект LocalTime (используемый в приведенном выше фрагменте), ни объект Date (используемый в вашем коде) не могут иметь формат. То, что вы получаете, когда вы объединяете Date со строкой или печатаете LocalTime, является результатом метода toString объекта, и вы не можете изменить этот метод (только в подклассах, и вы этого не хотите). Другими словами, если вам нужен определенный формат, вам нужно указать этот формат в строке вне объекта даты и времени.

Удачная часть заключается в том, что LocalTime.toString() создает нужный вам формат (пока секунды и доли секунды равны нулю, иначе они тоже были бы в строке).

Будет ли это работать на вашем устройстве Android? Так и будет. LocalTime — это класс JSR-310, также известный как java.time, современный API даты и времени Java, представленный почти 4 года назад, в начале 2014 года. JSR-310 был портирован на Java 6 и 7 в ThreeTen Backport, который, в свою очередь, был адаптировано для Android в ThreeTenABP. Так что скачайте ThreeTenABP, добавьте его в свой проект и наслаждайтесь тем, насколько приятнее работать с ним, чем с устаревшими классами даты и времени.

PS В вашем вопросе есть ошибка в строке шаблона формата: hh в нижнем регистре означает час в пределах AM или PM от 1 до 12, что хорошо работает, когда часы равны 10, но не всегда. Я убежден, что вам нужны прописные буквы HH для часа дня в интервале от 0 до 23. Когда я запускаю ваш код со строкой 12:12, я получаю Чт 01 января 00:12:00 CET 1970. Часы 0, а не 12 .

Ссылки

person Ole V.V.    schedule 27.12.2017

Форматы даты и времени задаются строками шаблонов даты и времени. В строках шаблона даты и времени буквы без кавычек от «A» до «Z» и от «a» до «z» интерпретируются как буквы шаблона, представляющие компоненты строки даты или времени. Текст можно заключать в одинарные кавычки ('), чтобы избежать интерпретации. "''" представляет одинарную кавычку. Все остальные символы не интерпретируются; они просто копируются в выходную строку во время форматирования или сопоставляются с входной строкой во время синтаксического анализа.

Читать документ

Попробуйте это:

  DateFormat aFormatter = new SimpleDateFormat("HH:mm");
  Date dt = aFormatter.parse("10:10");
  Calendar aCalander = Calendar.getInstance();
  aCalander.setTime(dt);
  int hour = aCalander.get(Calendar.HOUR);
  int minute = aCalander.get(Calendar.MINUTE);
person Gowtham Subramaniam    schedule 27.12.2017
comment
@Omar Saleem Примите любой из этих ответов! - person Gowtham Subramaniam; 27.12.2017
comment
К вашему сведению, в этом ответе используются неприятные старые классы даты и времени, которые теперь заменены классами java.time. Для более ранних версий Android см. проекты ThreeTen-Backport и ThreeTenABP. Гораздо лучше: LocalTime.parse( "10:10" ) - person Basil Bourque; 27.12.2017
comment
Да, я принимаю вашу точку зрения. Но вот в этом вопросе он использует то же самое. - person Gowtham Subramaniam; 27.12.2017

Когда дата будет создана, она будет иметь формат «Четверг, 01 января, 10:00:00 по Гринвичу + 05:00 1970», как вы упомянули в своем выводе. Поэтому, если вы хотите отобразить и поиграть с форматом даты, вы должны использовать метод формата в SimpleDateFormat. Я надеюсь, что приведенный ниже код поможет вам лучше понять.

//formatting date in Java using SimpleDateFormat
String date_s = "10:10"; 
SimpleDateFormat dt = new SimpleDateFormat("hh:mm"); 
Date date = dt.parse(date_s); 

System.out.println(date);   
System.out.println(dt.format(date));
person Akjun    schedule 27.12.2017
comment
К вашему сведению, в этом ответе используются неприятные старые классы даты и времени, которые теперь заменены классами java.time. Для более ранних версий Android см. проекты ThreeTen-Backport и ThreeTenABP. Гораздо лучше: LocalTime.parse( "10:10" ) - person Basil Bourque; 27.12.2017