2014-12-15 5 views
12

Ich habe eine Datumsspalte in einer Cassandra-Familie. Wenn ich Daten von diesem CF mithilfe der API datastax java abrufe, kann dieses Datumsobjekt als Objekt java.util.Date verwendet werden.erhalten Jahr von java.util.Date

Es hat eine getYear() Methode, aber es ist veraltet. Die entsprechende javadoc sagt:

Ab JDK Version 1.1, ersetzt durch Calendar.get (Calendar.YEAR) - 1900.

Wie kann ich das Jahr bekommen, Monat, Tag Attribute ab diesem Zeitpunkt Objekt richtig?

+2

Wenn Sie immer den Wert als 'java.util.Date', in welcher Zeitzone tun Sie für das Jahr verwenden? Ein "Datum" ist nur ein Zeitpunkt. –

+0

möglich Duplikat [Integer-Wert des laufenden Jahres in Java Get] (http://stackoverflow.com/questions/136419/get-integer-value-of-the-current-year-in-java) –

Antwort

29

Könnten Sie wie tihs versuchen;

 // create a calendar 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(datetime); //use java.util.Date object as arguement 
     // get the value of all the calendar date fields. 
     System.out.println("Calendar's Year: " + cal.get(Calendar.YEAR)); 
     System.out.println("Calendar's Month: " + cal.get(Calendar.MONTH)); 
     System.out.println("Calendar's Day: " + cal.get(Calendar.DATE)); 

Wie in javadocs erwähnt;

@Deprecated public int getYear() Veraltet. Ab JDK Version 1.1, durch Calendar.get (Calendar.YEAR) ersetzt - 1900 einen Wert zurück, dass das Ergebnis 1900 aus dem Jahr der Subtraktion, die enthält oder beginnt mit dem Zeitpunkt dieses Date-Objekt dargestellt wird, als interpretiert in der lokalen Zeitzone. Rückkehr: das Jahr vertreten durch dieses Datum, minus 1900.

+2

Sie müssen das Datum einstellen, bevor das Jahr immer: 'cal.setTime (yourDateObjectFromCassandra);' dann können Sie tun 'cal.get (Calendar.YEAR);' – Narmer

+0

@Narmer: Nein, 'Calendar.getInstance()' Standardwerte das aktuelle Datum/Uhrzeit. –

+1

@JonSkeet Ja, aber das OP will das Jahr des Kassandra-Objekts, nicht das laufende Jahr – Narmer

1

Eine gute Möglichkeit ist das Datumsformat wie folgt zu verwenden:

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy"); 
Date    date = sdf1.parse(datetime); 
String   year = sdf2.format(date); 
+1

Keine Notwendigkeit, Verwende 'SimpleDateFormat'. 'Calendar # Get' ist in Ordnung und schneller. –

0

Um die Datums- & Zeitfelder abrufen Sie diesen Code verwenden können:

DateFormat.getDateTimeInstance().getCalendar().get(DateFormat.MONTH_FIELD) 

Ersetzen Sie einfach MONTH_FIELD mit einem somehting sonst wie "DAY_OF_WEEK_FIELD" den Tag der Woche abgerufen werden (ich glaube, ‚1‘ steht für Montag) oder „MINUTE_FIELD“ für die aktuelle Minute usw. :)

1

Verwendung LOCALDATE Objekt in java8