2011-10-28 36 views
18

Me gustaría obtener la fecha actual en milisegundos con solo año, mes y fecha. Pero cuando uso este código:calendario Java obtenga la fecha actual, sin horas, minutos, segundos y milisegundos, en milisegundos

Calendar cal = Calendar.getInstance(); 
cal.clear(Calendar.HOUR); 
cal.clear(Calendar.MINUTE); 
cal.clear(Calendar.SECOND); 
cal.clear(Calendar.MILLISECOND); 
currentDate = cal.getTimeInMillis(); 

Todavía obtengo el tiempo en milisegundos con la hora. ¿Cómo puedo solucionar esto?

// André

Respuesta

39
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 
currentDate = cal.getTimeInMillis(); 

Sea cuidado en la zona horaria de su calendario.

+0

gracias, esto lo hizo! –

+0

@just_user luego valide la respuesta ... – Fred

+0

en Android que me dio ayer (medianoche) – Anthony

5

del javadoc: El HOUR_OF_DAY, campos de hora y AM_PM se manejan de forma independiente y se aplica la regla de la resolución de la hora del día. Al borrar uno de los campos, no se restablece el valor de la hora del día de este calendario. Use set (Calendar.HOUR_OF_DAY, 0) para restablecer el valor de la hora.

cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 

que necesite configurar AM/PM, así

+0

Am/PM - es por eso que utiliza Calendar.HOUR_OF_DAY como el otro ejemplo lo hace – Mifune

8

Si sólo desea que esta relación con GMT y explícitamente que desea es milisegundos, puede utilizar esto:

long now = System.currentTimeMillis(); 
long today = now - now % 86400000; 
1

tl; dr

LocalDate.now() 

LocalDate

Si lo que desea es en realidad sólo la fecha sin la hora, utilice LocalDate clase.

La clase LocalDate representa un valor de fecha solamente sin hora del día y sin zona horaria.

Una zona horaria es crucial para determinar una fecha. Para cualquier momento dado, la fecha varía alrededor del mundo por zona. Por ejemplo, unos minutos después de la medianoche en Paris France es un nuevo día mientras aún está "ayer" en Montréal Québec.

Especifique un proper time zone name en el formato de continent/region, como America/Montreal, Africa/Casablanca, o Pacific/Auckland. Nunca use la abreviatura de 3-4 letras como EST o IST ya que son no zonas horarias verdaderas, no estandarizadas, y ni siquiera únicas (!).

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(z); 

ZonedDateTime

Si desea una cita con el día de tiempo de puestos en el primer momento del día, pregunte java.time para determinar ese momento para usted. No suponga que el primer momento es a las 00:00:00. Anomalías como el horario de verano significa que el primer momento puede ocurrir en otro momento, como 01:00:00.

Use ese objeto de zona horaria, el ZoneId, para generar un objeto ZonedDateTime.

ZonedDateTime zdt = today.atStartOfDay(z); // Determine the first moment of the day on this date for this time zone. 

para ver este mismo momento como un valor en UTC, extraer un objeto Instant.

Instant instant = zdt.toInstant(); 

Evitar el legado clases de fecha y hora

Evitar las clases de fecha y hora viejos molestos como Calendar. Estos son ahora heredados, suplantados por las clases java.time.


Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat.

El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

Cuestiones relacionadas