web-dev-qa-db-fra.com

Temps d'analyse du format hh: mm: ss

Comment puis-je analyser une heure de format hh:mm:ss, entré sous forme de chaîne pour obtenir uniquement les valeurs entières (en ignorant les deux-points) en java?

38
user1604288

Selon le commentaire de Basil Bourque, il s'agit de la réponse mise à jour pour cette question, en tenant compte de la nouvelle API de 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));

Remarques:

  • puisque la question de l'OP contient un exemple concret d'un instant de temps contenant uniquement des heures, des minutes et des secondes (pas de jour, de mois, etc.), la réponse ci-dessus utilise uniquement LocalTime . Si vous souhaitez analyser une chaîne qui contient également des jours, des mois, etc., alors LocalDateTime serait requis. Son utilisation est à peu près analogue à celle de LocalTime.
  • comme la question de l'instant instant int int OP ne contient aucune information sur le fuseau horaire, la réponse utilise la version LocalXXX des classes de date/heure (LocalTime, LocalDateTime). Si la chaîne de temps qui doit être analysée contient également des informations de fuseau horaire, alors ZonedDateTime doit être utilisé.

====== Voici l'ancienne réponse (originale) à cette question, en utilisant l'API pré-Java8: =====

Je suis désolé si je vais déranger quelqu'un avec ça, mais je vais en fait répondre à la question. Les API Java sont assez énormes, je pense qu'il est normal que quelqu'un en manque de temps en temps.

Un SimpleDateFormat pourrait faire l'affaire ici:

http://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html

Cela devrait être quelque chose comme:

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

Les pièges que vous devez connaître:

  • le modèle que vous passez à SimpleDateFormat peut être différent de celui de mon exemple en fonction des valeurs que vous avez (sont les heures au format 12 heures ou au format 24 heures, etc.). Regardez la documentation dans le lien pour plus de détails à ce sujet

  • Une fois que vous avez créé un objet Date à partir de votre chaîne (via SimpleDateFormat), ne soyez pas tenté d'utiliser Date.getHour (), Date.getMinute () etc. Ils peuvent sembler fonctionner parfois, mais dans l'ensemble, ils peuvent donner de mauvais résultats et, en tant que tels, sont désormais obsolètes. Utilisez plutôt le calendrier comme dans l'exemple ci-dessus.

73
Shivan Dragon

Un peu bavard, mais c'est la façon standard d'analyser et de formater les dates en 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
String time = "12:32:22";
String[] values = time.split(":");

Cela prendra votre temps et le divisera là où il verra deux points et mettra la valeur dans un tableau, vous devriez donc avoir 3 valeurs après cela.

Ensuite, parcourez le tableau de chaînes et convertissez chacun. (avec Integer.parseInt)

4
AwDogsGo2Heaven

Si vous souhaitez extraire les heures, les minutes et les secondes, essayez ceci:

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]);
2
aymeric