Exercices manipulation des dates en Java Série 01
Exercices manipulation des dates en Java Série 01
-
Exercice 01
-
Énoncé
- Vous disposez d’une classe permettant de créer facilement des objets de type Evenement. Chaque événement a des attributs et des méthodes. Seulement, les dates et heures renvoyées ne sont pas dans un format correctement exploitable, ce sont simplement des chaînes de caractères formatées :
- Modifiez les attributs date et heure afin de créer des objets de type LocalDate et LocalTime. Dans les paramètres du constructeur, on conservera les mêmes attributs de type chaîne de caractères. Dans le corps du constructeur, on utilisera pour l’affectation des valeurs passées en paramètres, la méthode
LocalDate.parse()
et la méthodeLocalTime.parse()
permettant de créer une instance de la classe à partir d’une chaîne de caractères (transformer une chaîne de date ou d’heure normée en objet de type LocalDate ou LocalTime). -
Solution
- Si on appelle le constructeur dans le Main en passant des chaînes de caractères correspondant à une date et à une heure normalisées, alors, le constructeur fonctionne correctement :
-
Solution
- Reprenez les méthodes de la classe afin de traiter des dates et des heures avec les classes LocalDate et LocalTime. Rajoutez un attribut dans la classe contenant le fuseau horaire, qui sera définissable lors de l’appel du constructeur. L’horaire devra contenir une zone définie avec un fuseau horaire, grâce aux classes ZoneId et ZonedDateTime. Enfin, la chaîne imprimée par la méthode affichage() sera formatée de manière à afficher la date et l’heure avec un format du type : « mercredi 20 janvier 1995 – 09 :25 ».
- Ici, pour créer notre objet de type ZonedDateTime, on utilise directement la méthode ZonedDateTime.of() et on n’utilise pas en intermédiaire la classe LocalDateTime. On peut voir que le code fonctionne quand on appelle la méthode affichage() dans le Main.
-
Exercice 02
-
Énoncé
- Ecrivez une application JavaFX qui demande à l’utilisateur de saisir sa date de naissance au format jour/mois/année et qui affiche ensuite son âge en années, mois et jours. L’application gère également le cas où l’utilisateur ne saisit pas la date au format attendu.
- Créer l’interface utilisateur pour saisir la date de naissance.
- Ajouter des gestionnaires d’événements pour valider la saisie et calculer l’âge.
- Afficher le résultat ou un message d’erreur en cas de format incorrect.
-
Solution
public class Evenement {
String titre;
String date;
String heure;
String description;
public Evenement(String titre, String date, String heure, String description) {
this.titre = titre;
this.date = date;
this.heure = heure;
this.description = description;
}
private String horaireFormatter () {
return this.date + " - " + this.heure;
}
public void affichage() {
System.out.println("Titre : " + this.titre + "\nHoraire : " + horaireFormatter() + "\nDescription : " + this.description);
}
}
Cliquez ici
import java.time.LocalDate;
import java.time.LocalTime;
public class Evenement {
String titre;
LocalDate date;
LocalTime heure;
String description;
public Evenement(String titre, String date, String heure, String description) {
this.titre = titre;
this.date = LocalDate.parse(date);
this.heure = LocalTime.parse(heure);
this.description = description;
}
private String horaireFormatter () {
return this.date + " - " + this.heure;
}
public void affichage() {
System.out.println("Titre : " + this.titre + "\nHoraire : " + horaireFormatter() + "\nDescription : " + this.description);
}
}
Cliquez ici
public class Main {
public static void main(String[] args) {
Evenement event1 = new Evenement("Réunion pro", "1996-06-22", "02:02:02", "réunion de briefing");
}
}
Cliquez ici
import java.time.*;
import java.time.format.DateTimeFormatter;
public class Evenement {
String titre;
LocalDate date;
LocalTime heure;
ZoneId fuseauHoraire;
String description;
public Evenement(String titre, String date, String heure, String fuseauHoraire, String description) {
this.titre = titre;
this.date = LocalDate.parse(date);
this.heure = LocalTime.parse(heure);
this.fuseauHoraire = ZoneId.of(fuseauHoraire);
this.description = description;
}
private ZonedDateTime horaireFormatter () {
ZonedDateTime horaire = ZonedDateTime.of(this.date, this.heure,fuseauHoraire);
return horaire;
}
public void affichage() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("eeee dd MM yyyy - hh:mm");
String horaireFormete = horaireFormatter().format(formatter);
System.out.println("Titre : " + this.titre + "\nHoraire : " + horaireFormete + "\nDescription : " + this.description);
}
}
Cliquez ici
public class Main {
public static void main(String[] args) {
Evenement event1 = new Evenement("Réunion pro", "1996-06-22", "02:02:02", "UTC", "réunion de briefing");
event1.affichage();
}
}
Cliquez ici
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class AgeCalculatorApp extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Age Calculator");
// Create UI elements
Label instructionLabel = new Label("Enter your birth date (dd/MM/yyyy):");
TextField birthDateField = new TextField();
Button calculateButton = new Button("Calculate Age");
Label resultLabel = new Label();
// Set up layout
VBox layout = new VBox(10);
layout.setPadding(new Insets(20));
layout.getChildren().addAll(instructionLabel, birthDateField, calculateButton, resultLabel);
// Set button action
calculateButton.setOnAction(e -> {
String birthDateString = birthDateField.getText();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
try {
LocalDate birthDate = LocalDate.parse(birthDateString, formatter);
LocalDate currentDate = LocalDate.now();
Period age = Period.between(birthDate, currentDate);
resultLabel.setText("Your age is: " + age.getYears() + " years, " + age.getMonths() + " months, and " + age.getDays() + " days.");
} catch (DateTimeParseException ex) {
resultLabel.setText("Invalid date format. Please enter the date in dd/MM/yyyy format.");
}
});
// Set up scene and stage
Scene scene = new Scene(layout, 400, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}