2014-12-15 5 views
12

У меня есть столбец даты в семействе столбцов Кассандры. Когда я извлекаю данные из этого CF с помощью API java datastax, этот объект даты может быть взят как объект java.util.Date.get Год от java.util.Date

У него есть метод getYear(), но он устарел. Соответствующий Javadoc говорит:

По JDK версии 1.1, заменен Calendar.get (Calendar.YEAR) - 1900.

Как я могу получить год, месяц, день атрибуты с этой даты объект правильно?

+2

Если вы получаете значение как 'java.util.Date', какой часовой пояс вы хотите использовать в течение года? «Дата» - это всего лишь момент времени. –

+0

Возможный дубликат [Получить целочисленное значение текущего года в Java] (http://stackoverflow.com/questions/136419/get-integer-value-of-the-current-year-in-java) –

ответ

29

Не могли бы вы попробовать как 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)); 

Как упоминалось в javadocs;

@Deprecated public int getYear() Устаревший. Начиная с версии JDK версии 1.1, заменен на Calendar.get (Calendar.YEAR) - 1900. Возвращает значение, которое является результатом вычитания 1900 из года, который содержит или , начинается с момента времени, представленного этим объектом Date, так как интерпретируется в локальном часовом поясе. Возвраты: год представлен этой дате, минус 1900.

+2

Вы должны установить дату перед получением года: 'cal.setTime (yourDateObjectFromCassandra);' тогда вы можете сделать 'cal.get (Calendar.YEAR);' – Narmer

+0

@Narmer: Нет, 'Calendar.getInstance()' по умолчанию текущая дата/время. –

+1

@JonSkeet Да, но OP хочет год объекта Cassandra, а не текущий год – Narmer

1

Хороший вариант заключается в использовании формат даты следующим образом:

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

Нет необходимости используйте 'SimpleDateFormat'. 'Calendar # get' отлично и быстрее. –

0

Чтобы получить временные поля даты & вы можете использовать этот код:

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

Просто заменить MONTH_FIELD одним somehting еще как «DAY_OF_WEEK_FIELD» чтобы получить день недели (я думаю, что «1» означает понедельник) или «MINUTE_FIELD» для текущей минуты и т.д. :)

1

использование объекта LocalDate в 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(); 
Смежные вопросы