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.
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?
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.