So extrahieren Sie Tages-, Monats- und Jahreswerte aus einer Zeichenfolge [wie 18/08/2012]. Ich habe versucht, SimpleDateFormat zu verwenden, aber es gibt ein Date-Objekt zurück, und ich habe festgestellt, dass alle Get-Methoden veraltet sind. Gibt es einen besseren Weg, dies zu tun?
Vielen Dank
Persönlich würde ich Joda Time verwenden, was das Leben erheblich vereinfacht. Insbesondere bedeutet dies, dass Sie sich nicht um die Zeitzone der Calendar
im Vergleich zur Zeitzone einer SimpleDateFormat
kümmern müssen - Sie können nur eine LocalDate
parsen, was Ihnen die Daten wirklich zeigen. Es bedeutet auch, dass Sie sich keine Sorgen machen müssen, dass Monate 0-basiert sind :)
Joda Time macht viele Datums-/Uhrzeitvorgänge viel angenehmer.
import Java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) throws Exception {
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy")
.withLocale(Locale.UK);
LocalDate date = formatter.parseLocalDate("18/08/2012");
System.out.println(date.getYear()); // 2012
System.out.println(date.getMonthOfYear()); // 8
System.out.println(date.getDayOfMonth()); // 18
}
}
Einfach für String.split()
gehen,
String str[] = "18/08/2012".split("/");
int day = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
..... and so on
Dies sollte Sie in Gang bringen, ohne externe Gläser hinzuzufügen
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse("18/08/2012");
Calendar c = Calendar.getInstance();
c.setTime(parse);
System.out.println(c.get(Calendar.MONTH) + c.get(Calendar.DATE) + c.get(Calendar.YEAR));
Erstellen Sie ein Java.util.Calendar-Objekt wie folgt aus diesem Datum, und extrahieren Sie die Datumsteile:
Calendar cal = Calendar.getInstance();
cal.setTime(<date from simple-date-format).
cal.get(Calendar.MONTH);
usw.,
Java.time.LocalDate.parse(
"18/08/2012" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
).getDayOfMonth() // .getYear() .getMonth()
Der moderne Ansatz verwendet die Klassen Java.time. Vermeiden Sie die problematischen älteren Klassen wie Date
& Calendar
.
LocalDate
String input = "18/08/2012" ;
Die LocalDate
-Klasse steht für einen Datumswert ohne Uhrzeit und ohne Zeitzone.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
ld.toString (): 2012-08-18
Fragen Sie nach den Teilen.
int d = ld.getDayOfMonth() ;
int m = ld.getMonthValue() ;
int y = ld.getYear() ;
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 .
Verwenden Sie dies und übergeben Sie den Datumswert
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse(""18/01/2018);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
int date = calendar.get(Calendar.DATE);
//+1 Is Important Because if the month is January then coming 0 so Add +1
int month = calendar.get(Calendar.MONTH)+1;
int year = calendar.get(Calendar.YEAR);
System.out.println("Date:"+date +":Month:"+ month + ":Year:"+year);
Ein anderer Ansatz kann use Calendar object get(Calendar.MONT)
sein.
Beispiel:
Calendar cal = Calendar.getInstance();
cal.setTime(dateObj).
cal.get(Calendar.MONTH);
(oder)
Sie können auch String.split () verwenden.