2010-10-19 25 views
18

Eclipse được cảnh báo rằng tôi đang sử dụng một phương pháp chấp nhận:Java ngày getDate() bị phản đối, refactored sử dụng lịch nhưng trông xấu xí

eventDay = event.getEvent_s_date().getDate(); 

Vì vậy, tôi viết lại nó như

eventDay = DateUtil.toCalendar(event.getEvent_s_date()).get(Calendar.DATE); 

Dường để làm việc nhưng có vẻ xấu xí. Câu hỏi của tôi là tôi đã tái cấu trúc nó theo cách tốt nhất? Nếu không, làm thế nào bạn sẽ refactor? Tôi cần số ngày của một ngày được lưu trữ trong một bean.

tôi đã kết thúc thêm một phương pháp trong DateUtils của tôi để làm sạch nó lên

eventDay = DateUtil.getIntDate(event.getEvent_s_date());

public static int getIntDate(Date date) { 
    return DateUtil.toCalendar(date).get(Calendar.DATE); 
} 
+0

một gợi ý: sử dụng java 8 (xem câu trả lời dưới đây) – torina

Trả lời

24

Đó là tốt. Đối với tôi bit xấu hơn là dấu gạch dưới trong tên phương thức. Các quy ước Java cau mày khi nhấn mạnh ở dưới đó.

Bạn có thể muốn xem joda-time. Đó là tiêu chuẩn de-facto để làm việc với ngày/giờ:

new DateTime(date).getDayOfMonth(); 
+2

Tôi phải đồng ý, lại: dấu gạch dưới trong tên phương thức. Điều này có vẻ như ai đó đang cố gắng viết lại một khối mã PHP trong Java. –

+0

Dấu gạch dưới đến từ tên trường cơ sở dữ liệu của tôi. Tại một thời điểm trên đường đi, tôi đã phải tham khảo các trường với tất cả các mũ và nó đã khó để đọc EVENTSDATE là ngày bắt đầu sự kiện. Vì vậy, tôi có thói quen sử dụng dấu gạch dưới – jeff

+2

@jeff thực tế là tên cơ sở dữ liệu của bạn sử dụng một quy ước không có nghĩa là mã java của bạn không thể sử dụng một quy ước khác. Trên thực tế, đó là một thực tế phổ biến. – Bozho

0

Nếu bạn muốn có một ngày thanh lịch hơn/Thời gian api, sử dụng Joda Time.

+6

sau đó nói với anh ta cách làm những gì anh ta muốn với thời gian joda – Bozho

+0

FYI, dự án [Joda-Time] (http://www.joda.org/joda-time/) hiện đang ở [chế độ bảo trì] (https: //en.wikipedia.org/wiki/Maintenance_mode), với nhóm tư vấn di chuyển đến [java.time] (http://docs.oracle.com/javase/9/docs/api/java/time/package- summary.html) các lớp học. Xem [Hướng dẫn của Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

11
Calendar cal = Calendar.getInstance(); 
      cal.setTime(date); 

Integer date = cal.get(Calendar.DATE); 

/*Similarly you can get whatever value you want by passing value in cal.get() 
     ex DAY_OF_MONTH 
     DAY_OF_WEEK 
     HOUR_OF_DAY 
     etc etc.. 
*/ 

Bạn có thể xem java.util.Calendar API.

+0

FYI, các lớp ngày giờ phiền hà cũ như ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html), [ 'java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) và' java.text.SimpleDateFormat' hiện là [legacy] (https://en.wikipedia.org/wiki/Legacy_system), được thay thế bởi [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) được xây dựng trong Java 8 & Java 9. Xem [Hướng dẫn của Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

4

Với Java 8 trở lên, nó khá dễ dàng. Có LocalDate lớp, trong đó có getDayOfMonth() phương pháp:

LocalDate date = now(); 
int dayOfMonth = date.getDayOfMonth(); 

Với java.time lớp bạn không cần những thư viện của bên thứ ba nữa. Tôi khuyên bạn nên đọc khoảng LocalDateLocalDateTime.

Các vấn đề liên quan