2014-12-15 20 views
12

Ho una colonna della data in una famiglia di colonne Cassandra. Quando recupero i dati da questa CF utilizzando l'API java datastax, questo oggetto data può essere preso come un oggetto java.util.Date.get Year from java.util.Date

Ha un metodo getYear() ma è obsoleto. Il javadoc corrispondente dice:

partire da JDK versione 1.1, sostituito da Calendar.get (Calendar.YEAR) - 1900.

Come posso ottenere l'anno, il mese, il giorno attributi da questa data oggetto correttamente?

+2

Se si ottiene il valore come 'java.util.Date', quale fuso orario si desidera utilizzare per l'anno? Una 'Data' è solo un punto nel tempo. –

+0

possibile duplicato di [Ottieni valore intero dell'anno corrente in Java] (http://stackoverflow.com/questions/136419/get-integer-value-of-the-current-year-in-java) –

risposta

29

Potresti provare come tihs;

 // 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)); 

Come indicato in javadocs;

@Deprecated public int getYear() Obsoleto. A partire da JDK versione 1.1, sostituito da Calendar.get (Calendar.YEAR) - 1900. Restituisce un valore che è il risultato della sottrazione 1900 dell'anno che contiene o inizia con l'istante in tempo rappresentato da questo oggetto Date, come interpretato nel fuso orario locale. Restituisce: l'anno rappresentato da questa data, meno 1900.

+2

È necessario impostare la data prima di ottenere l'anno: 'cal.setTime (yourDateObjectFromCassandra);' quindi si può fare 'cal.get (Calendar.YEAR);' – Narmer

+0

@Narmer: No, 'Calendar.getInstance()' imposta di default su la data/ora corrente. –

+1

@JonSkeet Sì, ma l'OP vuole l'anno dell'oggetto Cassandra, non l'anno corrente – Narmer

1

Una buona opzione è quella di utilizzare il formato data come segue:

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

Non c'è bisogno di usa 'SimpleDateFormat'. 'Calendar # get' va bene e più velocemente. –

0

per recuperare i campi di tempo data & è possibile utilizzare questo codice:

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

basta sostituire MONTH_FIELD con uno somehting altro come "DAY_OF_WEEK_FIELD" per recuperare il giorno della settimana (credo '1' l'acronimo di lunedi) o "MINUTE_FIELD" per i minuti correnti, ecc :)

1

uso oggetto LocalDate in java8

Date date = new Date(); 
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); 
int year = localDate.getYear(); 
int month = localDate.getMonthValue(); 
int day = localDate.getDayOfMonth();