2010-10-19 12 views
18

Eclipse jest ostrzeżenie, że używam przestarzałej metody:Java Data getDate() przestarzałe, refactored używać kalendarza, ale wygląda brzydko

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

Więc przepisał go jako

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

To wydaje do pracy, ale wygląda brzydko. Moje pytanie brzmi: czy mogę to zmienić najlepiej? Jeśli nie, to w jaki sposób byś się odrodził? Potrzebuję numer dnia daty przechowywanej w ziarnie.

skończyło się dodając metodę w moich DateUtils go oczyścić

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

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

wskazówka: użyj java 8 (zobacz odpowiedź poniżej) – torina

Odpowiedz

24

jest w porządku. Dla mnie brzydszy bit to podkreślenie w nazwie metody. Konwencje w języku Java są podkreślone na podkreśleniach.

Być może zechcesz spojrzeć na joda-time. Jest to de facto standardem dla pracy z data/czas:

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

Muszę się zgodzić, jeszcze raz: podkreślenia w nazwie metody. To wygląda na kogoś, kto próbuje ponownie napisać blok kodu PHP w Javie. –

+0

Podkreślenia pochodzą z nazw moich pól bazy danych. W pewnym momencie po drodze musiałem odnieść się do pól z całych pułapek i trudno było odczytać EVENTSDATE jako datę rozpoczęcia wydarzenia. Więc mam zwyczaj używania podkreślenia – jeff

+2

@jeff fakt, że twoje nazwy baz danych używają jednej konwencji, nie oznacza, że ​​twój kod Java nie może używać innej konwencji. W rzeczywistości jest to powszechna praktyka. – Bozho

0

Jeśli chcesz bardziej eleganckie Date/Time api, użyj Joda Time.

+6

następnie powiedz mu, jak zrobić to, co chce z joda-time – Bozho

+0

FYI, projekt [Joda-Time] (http://www.joda.org/joda-time/) jest teraz w [trybie konserwacji] (https: //en.wikipedia.org/wiki/Maintenance_mode), z zespołem doradzającym migrację do [java.time] (http://docs.oracle.com/javase/9/docs/api/java/time/package- summary.html) klas. Zobacz [Tutorial by 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.. 
*/ 

Możesz zobaczyć java.util.Calendar API.

+0

FYI, kłopotliwe stare klasy czasu i daty, takie jak ['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), a' java.text.SimpleDateFormat' są teraz [starszeństwem] (https://en.wikipedia.org/wiki/Legacy_system), wypierany przez [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) klas wbudowanych w Java 8 i Java 9. Zobacz [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

4

Z Java 8 i nowszymi wersjami jest to dość łatwe. Jest LocalDate klasa, która ma getDayOfMonth() metody:

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

z java.time zajęć nie trzeba tych bibliotek innych firm już. Polecam lekturę o LocalDate i LocalDateTime.