Convertir les heures: minutes AM / PM en horodatage unix

Je viens de PHP mais j’apprends Android, alors excusez-moi si c’est trop basique.

J’ai trois variables qui contiennent des heures, des minutes et des am / pm. Comment pourrais-je le convertir en un timestamp unix afin d’obtenir la valeur combinée en quelques secondes?

Ssortingng hours = Ssortingng.valueOf(hourBox.getText()); // may contain a value like 05 Ssortingng minutes = Ssortingng.valueOf(minuteBox.getText()); // may contain a value like 45 Ssortingng ampm = Ssortingng.valueOf(ampmBox.getText()); // may contain a value like PM or AM // PHP way $timestamp = date('Ymd '.$hours.':'.$minutes.' '.$ampm); echo strtotime($timestamp); // What would be the equivalent of this in Java? 

Vous devriez utiliser LocalDateTime pour cela:

  Ssortingng hours = "05"; Ssortingng minutes = "45"; Ssortingng ampm = "PM"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd hh:mm a"); LocalDateTime dateTime = LocalDateTime.parse(Ssortingng.format("20160101 %s:%s %s", hours, minutes, ampm), formatter); System.out.println(dateTime); 

Si vous n’avez pas encore LocalDateTime, vous pouvez utiliser SimpleDateFormat:

  Ssortingng hours = "05"; Ssortingng minutes = "45"; Ssortingng ampm = "PM"; SimpleDateFormat format = new SimpleDateFormat("hh:mm a"); Date dateTime = format.parse(Ssortingng.format("%s:%s %s", hours, minutes, ampm)); System.out.println(dateTime); 

Comme vous le voyez, le code est sensiblement le même.

Si vous souhaitez conserver la date actuelle, passez à Calendrier:

  Ssortingng hours = "05"; Ssortingng minutes = "45"; Ssortingng ampm = "PM"; Calendar calendar = GregorianCalendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR, Integer.parseInt(hours)); calendar.set(Calendar.MINUTE, Integer.parseInt(minutes)); calendar.set(Calendar.AM_PM, "AM".equals(ampm) ? 0 : 1); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a"); System.out.println(format.format(calendar.getTime())); 

La réponse de Soshin est bonne. Mais personnellement, je travaillerais avec la date et l’heure séparément.

LocalDate

 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "uuuuMMdd" ); LocalDate ld = LocalDate.parse( "20160101" , dateFormatter ); 

LocalTime

Et l’heure du jour. Pas besoin de la partie AM / PM; le code de formatage indique si l’heure prévue est celle de 12 heures ou de 24 heures.

 DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern( "hhmm" ); // hh = two digits of 12-hour time (1-12). mm = minute-of-hour. LocalDate ld = LocalDate.parse( hours + minutes , timeFormatter ); // 0545 in afternoon. 

LocalDateTime

Vous pouvez les combiner dans un LocalDateTime .

 LocalDateTime ldt = LocalDateTime.of( ld , lt ); 

ZonedDateTime

Si vous connaissez avec certitude le fuseau horaire de cette valeur, appliquez un ZoneId pour obtenir un ZonedDateTime .

 ZoneId z = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ldt.atZone( z ); 

Un LocalDateTime n’a aucune signification; ce n’est pas un moment réel sans le contexte d’un décalage de UTC ou d’un fuseau horaire. En ZonedDateTime un ZonedDateTime est un point réel sur la timeline.

À propos de java.time

Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes remplacent les anciennes classes de date / heure .Calendar , telles que java.util.Date , .Calendar et java.text.SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers java.time.

Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir les classes java.time?

  • Java SE 8 et SE 9 et versions ultérieures
    • Intégré
    • Partie de l’API Java standard avec une implémentation intégrée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et SE 7
    • Une grande partie de la fonctionnalité java.time est transférée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus) pour Android en particulier.
    • Voir Comment utiliser …

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts futurs à java.time. Vous pouvez y trouver des classes utiles telles que Interval , YearWeek , YearQuarter , etc.