2010-10-19 6 views
18

Eclipse está advirtiendo que estoy usando un método en desuso:Java Fecha getDate() obsoleto, refactorizado utilizar el calendario, pero se ve feo

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

Así que volvió a escribir como

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

Parece para trabajar, pero se ve feo. Mi pregunta es si refactoré esto de la mejor manera? Si no, ¿cómo se refactorizaría? Necesito el día número de una fecha almacenada en un frijol.

que terminó añadiendo un método en mis DateUtils para limpiarlo

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

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

una pista: use java 8 (ver la respuesta a continuación) – torina

Respuesta

24

Está bien. Para mí, el bit más feo es el guión bajo en el nombre del método. Las convenciones de Java fruncen el ceño al subrayar allí.

Es posible que desee echar un vistazo a joda-time. Es el estándar de facto para trabajar con fecha/hora:

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

Tengo que estar de acuerdo, re: los caracteres de subrayado en el nombre del método. Parece que alguien intenta volver a escribir un bloque de código PHP en Java. –

+0

Los caracteres de subrayado provienen de los nombres de campo de mi base de datos. En un punto del camino tuve que hacer referencia a los campos con mayúsculas y se hizo difícil leer EVENTSDATE como fecha de inicio del evento. Así que tuve el hábito de utilizar el guión bajo – jeff

+2

@jeff, el hecho de que los nombres de sus bases de datos usen una convención no significa que su código Java no pueda usar otra convención. En realidad, es una práctica común. – Bozho

0

Si desea una fecha más elegante/Tiempo API, utilice Joda Time.

+6

y luego decirle cómo hacer lo que quiera con joda-time – Bozho

+0

FYI, el proyecto [Joda-Time] (http://www.joda.org/joda-time/) está ahora en [modo de mantenimiento] (https: //en.wikipedia.org/wiki/Maintenance_mode), con el equipo aconsejando la migración a [java.time] (http://docs.oracle.com/javase/9/docs/api/java/time/package- summary.html) classes. Consulte [Tutorial de 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.. 
*/ 

Se puede ver java.util.Calendar API.

+0

FYI, las viejas clases problemáticas de fecha y hora como ['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), y' java.text.SimpleDateFormat' ahora son [legacy] (https://en.wikipedia.org/wiki/Legacy_system), suplantado por el [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) clases integradas en Java 8 y Java 9. Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

4

Con Java 8 y posterior, es bastante fácil. Hay LocalDate clase, que tiene getDayOfMonth() método:

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

Con las clases java.time no necesitas esas bibliotecas de terceros más. Yo recomendaría leer sobre LocalDate y LocalDateTime.

Cuestiones relacionadas