Gibt es eine direkte Möglichkeit, ein Datum für eine Variable festzulegen, aber als Eingabe? Ich meine, dass ich das Datum zur Entwurfszeit nicht kenne, der Benutzer sollte es geben. Ich habe den folgenden Code ausprobiert, aber er funktioniert nicht: Calendar myDate = new GregorianCalendar (int year, int month, int day);
Versuchen Sie den folgenden Code. Ich analysiere den eingegebenen String, um ein Datum festzulegen
// 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);
In einigen anderen Antworten wird gezeigt, wie Sie Eingaben vom Benutzer erhalten, aber Sie verwenden die problematischen alten Datums-/Uhrzeit-Klassen, die jetzt veraltet sind und durch die Java.time-Klassen ersetzt werden.
LocalDate
Verwenden Sie für einen Datumswert ohne Uhrzeit und ohne Zeitzone die Klasse LocalDate
.
LocalDate ld = LocalDate.of( 2026 , 1 , 23 );
Analysieren Sie Ihre Eingabezeichenfolgen als Ganzzahlen, wie hier beschrieben: Wie konvertiere ich einen String in ein int in 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 );
Das Java.time Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die lästigen alten Legacy Date-Time-Klassen wie Java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Joda-Time -Projekt, jetzt im Wartungsmodus , empfiehlt die Migration zu den Java.time -Klassen.
Weitere Informationen finden Sie im Oracle Tutorial . Durchsuchen Sie den Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 310 .
Wo erhalten Sie die Java.time-Klassen?
Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von Java.time. Hier finden Sie einige nützliche Klassen wie Interval
, YearWeek
, YearQuarter
und more .
Ich habe die Antwort von @ SK08 geändert und eine Methode erstellt, die Jahr, Monat und Datum als Eingabe vom Benutzer übernimmt und das Datum zurückgibt.
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;
Dies sollte gut funktionieren und Sie können das Datum auch mit Setlenient-Funktion überprüfen.
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();
}
}