Как взять время в качестве ввода в Java? [Дубликат]

Первое решение, используя фильтр. Второе решение, используя понимание списка.

#If we want to remove all 2.
ls = [2, 2, 3, 4, 5, 6, 7, 8, 2, 3, 4, 6, 2]

# 1-filter takes two arguments(condition,sequence)
   ls = list(filter(lambda x: x != 2, ls))

# 2-list comprehension
   ls = [x for x in ls if x != 2]
34
задан mkobit 17 November 2015 в 18:12
поделиться

5 ответов

Согласно комментарию Basil Bourque, это обновленный ответ на этот вопрос, учитывая новый API Java 8:

    String myDateString = "13:24:40";
    LocalTime localTime = LocalTime.parse(myDateString, DateTimeFormatter.ofPattern("HH:mm:ss"));
    int hour = localTime.get(ChronoField.CLOCK_HOUR_OF_DAY);
    int minute = localTime.get(ChronoField.MINUTE_OF_HOUR);
    int second = localTime.get(ChronoField.SECOND_OF_MINUTE);

    //prints "hour: 13, minute: 24, second: 40":
    System.out.println(String.format("hour: %d, minute: %d, second: %d", hour, minute, second));

Замечания:

  • поскольку вопрос OP содержит конкретный пример момента времени, содержащего только часы, минуты и секунды (нет дня, месяца и т. д.), в ответе выше используется только LocalTime . Если вы хотите проанализировать строку, которая также содержит дни, месяц и т. Д., Тогда потребуется LocalDateTime . Его использование в значительной степени аналогично использованию LocalTime.
  • с момента времени, когда int OP вопрос не содержит никакой информации о часовом поясе, ответ использует версию LocalXXX классов даты / времени (LocalTime, LocalDateTime ). Если строка времени, которая должна быть проанализирована, также содержит информацию о часовом поясе, тогда необходимо использовать ZonedDateTime .

====== Ниже приведен старый ( оригинал) ответ на этот вопрос, используя pre-Java8 API: =====

Прошу прощения, если я собираюсь расстроить кого-либо с этим, но я на самом деле собираюсь ответить на вопрос. Java API довольно огромны, я думаю, что это нормально, что кто-то может время от времени пропустить.

SimpleDateFormat может сделать трюк здесь:

http: // docs .oracle.com / javase / 7 / docs / api / java / text / SimpleDateFormat.html

Это должно быть что-то вроде:

String myDateString = "13:24:40";
//SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
//the above commented line was changed to the one below, as per Grodriguez's pertinent comment:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date date = sdf.parse(myDateString);

Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date);   // assigns calendar to given date 
int hour = calendar.get(Calendar.HOUR);
int minute; /... similar methods for minutes and seconds

У вас есть должен знать:

  • шаблон, который вы передаете SimpleDateFormat, может быть другим, чем тот, который приведен в моем примере, в зависимости от того, какие значения у вас есть (часы в формате 12 часов или в формате 24 часа, и т.д). Посмотрите документацию по ссылке для получения подробной информации об этом
  • . Когда вы создаете объект Date из своей строки (через SimpleDateFormat), не испытывайте соблазна использовать Date.getHour (), Date.getMinute ( ) и т. д. Возможно, они время от времени работают, но в целом они могут давать плохие результаты и, как таковые, теперь устаревают. Вместо этого используйте календарь, как в примере выше.
66
ответ дан Shivan Dragon 22 August 2018 в 03:22
поделиться
  • 1
    Большое спасибо за понимание и ваш ответ. – user1604288 16 August 2012 в 21:34
  • 2
    Java 1.4 довольно стар. Обновите ссылки документации. – Luiggi Mendoza 16 August 2012 в 21:36
  • 3
    «hh» ожидает, что час будет в am / pm (1-12). Поскольку вы используете 13:24:40 в своем собственном примере, возможно, вам следует использовать «HH» в формате даты вместо – Grodriguez 28 August 2013 в 09:42
  • 4
    С помощью java 8 вы можете, LocalTime lt = LocalTime.parse("14:23:57"); – Asanka Siriwardena 6 January 2016 в 17:25
  • 5
    Этот ответ теперь устарел, используя неудобные старые классы времени, которые теперь вытесняются классами java.time . – Basil Bourque 27 December 2017 в 07:17

Если вы хотите извлечь часы, минуты и секунды, попробуйте следующее:

String inputDate = "12:00:00";
String[] split = inputDate.split(":");
int hours = Integer.valueOf(split[0]);
int minutes = Integer.valueOf(split[1]);
int seconds = Integer.valueOf(split[2]);
1
ответ дан aymeric 22 August 2018 в 03:22
поделиться

Немного verbose, но это стандартный способ синтаксического анализа и форматирования дат в Java:

DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
try {
  Date dt = formatter.parse("08:19:12");
  Calendar cal = Calendar.getInstance();
  cal.setTime(dt);
  int hour = cal.get(Calendar.HOUR);
  int minute = cal.get(Calendar.MINUTE);
  int second = cal.get(Calendar.SECOND);
} catch (ParseException e) {
  // This can happen if you are trying to parse an invalid date, e.g., 25:19:12.
  // Here, you should log the error and decide what to do next
  e.printStackTrace();
}
10
ответ дан João Silva 22 August 2018 в 03:22
поделиться
  • 1
    За исключением того, что молчащие глотательные исключения редко являются отличным вариантом. Трудно понять, что пошло не так, когда что-то пошло не так. – yshavit 16 August 2012 в 21:35
  • 2
    @yshavit: Это был просто пример. – João Silva 16 August 2012 в 22:16
  • 3
    Я понимаю, но, учитывая, что ОП является самопровозглашенным новичком, я хотел, чтобы они поняли, что эта часть примера - это не то, что они должны воспринимать буквально. – yshavit 16 August 2012 в 22:21
  • 4
    сделать yshavit happy: JOptionPane.showMessageDialog (null, e); – Petro 6 December 2013 в 21:47

вы можете использовать метод toCharArray () возвращать данные типа: array ("1", "2", ":", "0", "1", ":", "0", "0") & lt; - это char в java или вы можете преобразовать строку в Date + try catch =>, затем получить час, минуты и amp; секунд

-3
ответ дан Kris Khairallah 22 August 2018 в 03:22
поделиться
  • 1
    Это не очень хороший способ. если вы захотите это сделать, это упростит методы подстроки (...) пользователя String и избежать всех прыжков String / char / String. – Shivan Dragon 16 August 2012 в 21:26
  • 2
    Ну, положительная сторона этого заключается в том, что у меня есть каждый персонаж отдельно, и это будет полезно для моих целей. – user1604288 16 August 2012 в 21:35
String time = "12:32:22";
String[] values = time.split(":");

Это займет ваше время и разделит его на то, где он видит двоеточие, и поместите значение в массив, поэтому после этого у вас должно быть 3 значения.

Затем перебираем строковый массив и конвертируем каждый. (с Integer.parseInt)

4
ответ дан yshavit 22 August 2018 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: