2014-12-15 17 views
12

Tôi có một cột ngày trong một họ cột Cassandra. Khi tôi lấy dữ liệu từ CF này bằng cách sử dụng API datastax java, đối tượng ngày tháng này có thể được lấy làm đối tượng java.util.Date.nhận năm từ java.util.Date

Phương thức này có phương thức getYear() nhưng không được dùng nữa. Các javadoc tương ứng nói:

Tính đến JDK phiên bản 1.1, thay thế bằng Calendar.get (Calendar.YEAR) - 1900.

Làm thế nào tôi có thể nhận được năm, tháng, ngày tính từ ngày này đối tượng đúng cách?

+2

Nếu bạn nhận được giá trị dưới dạng 'java.util.Date', bạn muốn sử dụng múi giờ nào trong năm? 'Ngày' chỉ là một điểm trong thời gian. –

+0

có thể trùng lặp của [Nhận giá trị nguyên của năm hiện tại trong Java] (http://stackoverflow.com/questions/136419/get-integer-value-of-the-current-year-in-java) –

Trả lời

29

Bạn có thể thử như 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)); 

Như đã đề cập trong javadocs;

@Deprecated public int getYear() Không được chấp nhận. Kể từ phiên bản JDK 1.1, được thay thế bằng Calendar.get (Calendar.YEAR) - 1900. Trả về một giá trị là kết quả trừ 1900 từ năm chứa hoặc bắt đầu với thời gian được đại diện bởi đối tượng Ngày tháng này, như được diễn giải theo múi giờ địa phương. Returns: năm đại diện bởi ngày này, trừ 1900.

+2

Bạn phải đặt ngày trước khi nhận năm: 'cal.setTime (yourDateObjectFromCassandra);' thì bạn có thể làm 'cal.get (Calendar.YEAR); ' – Narmer

+0

@Narmer: Không,' Calendar.getInstance() 'mặc định là ngày/giờ hiện tại. –

+1

@JonSkeet Yep, nhưng OP muốn năm của đối tượng Cassandra, không phải năm hiện tại – Narmer

1

Một lựa chọn tốt là sử dụng định dạng ngày tháng như sau:

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

Không cần phải sử dụng 'SimpleDateFormat'. 'Lịch # get' là tốt và nhanh hơn. –

0

Để lấy các lĩnh vực thời gian ngày & bạn có thể sử dụng mã này:

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

Chỉ cần thay thế MONTH_FIELD với một somehting khác như "DAY_OF_WEEK_FIELD" để lấy ngày trong tuần (tôi nghĩ '1' là viết tắt của thứ hai) hoặc "MINUTE_FIELD" cho phút hiện tại, vv :) ​​

1

sử dụng đối tượng LOCALDATE trong 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(); 
Các vấn đề liên quan