Existe-t-il un moyen direct de définir une date sur une variable mais en entrée? Je veux dire que je ne connais pas la date au moment de la conception, l'utilisateur doit l'indiquer . J'ai essayé le code suivant mais cela ne fonctionne pas: int mois, int jour);
Essayez le code suivant. J'analyse la chaîne entrée pour créer une date
// To take the input
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the Date ");
String date = scanner.next();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
Date date2=null;
try {
//Parsing the String
date2 = dateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(date2);
Certaines autres réponses montrent correctement comment rassembler les entrées de l'utilisateur, mais utilisent les anciennes classes de date-heure problématiques qui sont maintenant héritées, supplantées par les classes Java.time.
LocalDate
Pour une valeur de date uniquement sans heure et sans fuseau horaire, utilisez la classe LocalDate
.
LocalDate ld = LocalDate.of( 2026 , 1 , 23 );
Analysez vos chaînes d'entrée sous forme d'entiers, comme indiqué ci-après: Comment convertir une chaîne en un entier en Java?
int y = Integer.parseInt( yearInput );
int m = Integer.parseInt( monthInput ); // 1-12 for January-December.
int d = Integer.parseInt( dayInput );
LocalDate ld = LocalDate.of( y , m , d );
Le cadre Java.time est intégré à Java 8 et aux versions ultérieures. Ces classes supplantent les anciennes classes problématiques héritées _ date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode { mode de maintenance }, conseille de migrer vers les classes Java.time .
Pour en savoir plus, consultez le Oracle Tutorial . 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 à Java.time. Vous pouvez y trouver des classes utiles telles que Interval
_, YearWeek
, YearQuarter
_ et plus _.
J'ai modifié la réponse @ SK08 et créé une méthode qui prend année, mois et date comme entrée de l'utilisateur et renvoie la date.
Scanner scanner = new Scanner(System.in);
String str[] = {"year", "month", "day" };
String date = "";
for(int i=0; i<3; i++) {
System.out.println("Enter " + str[i] + ": ");
date = date + scanner.next() + "/";
}
date = date.substring(0, date.length()-1);
System.out.println("date: "+ date);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date parsedDate = null;
try {
parsedDate = dateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return parsedDate;
Cela devrait fonctionner correctement et vous pouvez également valider la date à l’aide de la fonction setlenient.
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.ArrayList;
import Java.util.Date;
import Java.util.Scanner;
public class Datinput {
public static void main(String args[]) {
int n;
ArrayList<String> al = new ArrayList<String>();
Scanner in = new Scanner(System.in);
n = in.nextInt();
String da[] = new String[n];
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
Date date[] = new Date[n];
in.nextLine();
for (int i = 0; i < da.length; i++) {
da[i] = in.nextLine();
}
for (int i = 0; i < da.length; i++) {
try {
date[i] = sdf.parse(da[i]);
} catch (ParseException e) {
e.printStackTrace();
}
}
in.close();
}
}