Conversion de type Java 8 LocalDateTime (String, java.util.Date)
Les classes Date et Calendar ont été utilisées pour les types de date Java, mais il est recommandé d'utiliser les classes LocalDateTime / ZonedDateTime, etc. à partir de Java 8.
Cette fois, j'ai eu l'occasion d'utiliser la classe LocalDateTime, donc je l'ai étudiée. Il s'est avéré qu'aucune méthode ne pouvait être convertie en une seule fois et qu'il n'était pas possible de convertir facilement le type.
Cette fois, j'ai organisé String⇔LocalDateTime et java.util.Date⇔LocalDateTime à ma manière.
String → LocalDateTime
Convertissez dans le flux de String → SimpleDateFormat → Date → LocalDateTime.
public static LocalDateTime toLocalDateTime(String date, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date formatDate = sdf.parse(date);
return LocalDateTime.ofInstant(formatDate.toInstant(), ZoneId.systemDefault());
}
Exemple d'utilisation
public static void main(String args[]) {
//Résultat d'exécution: 2018-05-07T00:00
System.out.println(toLocalDateTime("2018/05/07", "yyyy/MM/dd"));
}
Contrairement à SimpleDateFormat, la classe DateTimeFormatter n'a pas besoin d'être nouvelle. Il est nécessaire de déterminer le modèle de date avec la méthode ofPattern au moment de la génération.
Convertissez dans le flux de String → DateTimeFormatter → LocalDateTime. Peut être plus court que l'utilisation de SimpleDateFormat.
public static LocalDateTime toLocalDateTime(String date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(date, dtf);
}
Exemple d'utilisation
public static void main(String args[]) {
//Résultat d'exécution: 2018-05-07T10:00
System.out.println(toLocalDateTime("2018/05/07 10:00:00","yyyy/MM/dd HH:mm:ss"));
}
Cependant, étant donné qu'il s'agit d'un LocalDateTime qui a une date et une heure, une erreur se produit si l'heure n'est pas spécifiée.
public static void main(String args[]) {
//Résultat de l'exécution: DateTimeParseException
System.out.println(toLocalDateTime("2018/05/07","yyyy/MM/dd"));
}
Donc, si vous n'avez besoin que de la date, essayez de renvoyer LocalDate, ou
public static LocalDate toLocalDate(String date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(date, dtf);
}
Après la conversion en LocalDate, ajoutez 0 heure pour le rendre LocalDateTime.
public static LocalDateTime toLocalDateTime(String date, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(date, dateTimeFormatter).atTime(LocalTime.MIN);
}
LocalDateTime → String ~~ Ceci peut être converti en un seul coup en utilisant la méthode parse. ~~ Je suis désolé, c'est un mensonge. Il peut être converti avec la méthode de format + DateTimeFormatter.
public static String toStr(LocalDateTime localDateTime, String format) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(dateTimeFormatter);
}
Exemple d'utilisation
public static void main(String args[]) {
//Résultat d'exécution: 2018/05/07
System.out.println(toStr(LocalDateTime.now(), "yyyy/MM/dd"));
}
LocalDateTime → java.util.Date Convertissez dans le flux de LocalDateTime → ZonedDateTime → Instant → java.util.Date.
public static Date toDate(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zone);
Instant instant = zonedDateTime.toInstant();
return Date.from(instant);
}
Exemple d'utilisation
public static void main(String args[]) {
//Résultat de l'exécution: lun 07 mai 19:59:32 JST 2018
System.out.println(toDate(LocalDateTime.now()));
}
java.util.Date → LocalDateTime
Convertissez dans le flux de Date → Instant → Date locale Heure.
public static LocalDateTime toLocalDateTime(Date date) {
Instant instant = date.toInstant();
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
Exemple d'utilisation
public static void main(String args[]) {
// 2018-05-07T19:59:32.139
System.out.println(toLocalDateTime(new Date()));
}
LocalDateTime est difficile à gérer. (Petite sensation) Il peut être préférable d'utiliser correctement LocalDate et LocalTime. Les variables sont déclarées ligne par ligne par souci de clarté (pour moi), mais bien sûr, il est préférable de tout faire en une seule ligne comme indiqué dans les commentaires.
public static void main(String args[]) {
// String→LocalDateTime
System.out.println(LocalDate.parse("2018/05/07",
DateTimeFormatter.ofPattern("uuuu/MM/dd"))
.atTime(LocalTime.MIN));
}
Je n'ai pas entièrement saisi la différence entre SimpleDateFormat et DateTimeFormatter, je vais donc l'examiner plus tard.
Recommended Posts