Respuestas:
Puedes usar los captadores de java.time.LocalDateTimepara eso.
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
O, cuando aún no esté en Java 8, utilice java.util.Calendar.
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);
System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);
De cualquier manera, esto se imprime a partir de ahora:
2010-04-16 15: 15: 17.816
Para convertir un inta String, utilice String#valueOf().
Si su intención es, después de todo, organizarlos y mostrarlos en un formato de cadena amigable para los humanos, entonces mejor use Java8 java.time.format.DateTimeFormatter( tutorial aquí ),
LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
o cuando aún no esté en Java 8, use java.text.SimpleDateFormat:
Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);
System.out.println(format1);
System.out.println(format2);
System.out.println(format3);
De cualquier manera, esto produce:
2010-04-16T15: 15: 17.816 Vie, 16 de abril de 2010 15:15:17 GMT 20100416151517
SimpleDateFormato DateTimeFormatterpara esa tarea en particular :)
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(new Date());
Cambie a joda-time y puede hacerlo en tres líneas
DateTime jodaTime = new DateTime();
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));
También tiene acceso directo a los campos individuales de la fecha sin usar un Calendario.
System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());
La salida es la siguiente:
jodaTime = 2010-04-16 18:09:26.060
year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60
Según http://www.joda.org/joda-time/
Joda-Time es la biblioteca de fecha y hora estándar de facto para Java. Desde Java SE 8 en adelante, se solicita a los usuarios que migren a java.time (JSR-310).
// Java 8
System.out.println(LocalDateTime.now().getYear()); // 2015
System.out.println(LocalDateTime.now().getMonth()); // SEPTEMBER
System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
System.out.println(LocalDateTime.now().getHour()); // 7
System.out.println(LocalDateTime.now().getMinute()); // 36
System.out.println(LocalDateTime.now().getSecond()); // 51
System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100
// Calendar
System.out.println(Calendar.getInstance().get(Calendar.YEAR)); // 2015
System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1); // 9
System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); // 7
System.out.println(Calendar.getInstance().get(Calendar.MINUTE)); // 35
System.out.println(Calendar.getInstance().get(Calendar.SECOND)); // 32
System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND)); // 481
// Joda Time
System.out.println(new DateTime().getYear()); // 2015
System.out.println(new DateTime().getMonthOfYear()); // 9
System.out.println(new DateTime().getDayOfMonth()); // 29
System.out.println(new DateTime().getHourOfDay()); // 7
System.out.println(new DateTime().getMinuteOfHour()); // 19
System.out.println(new DateTime().getSecondOfMinute()); // 16
System.out.println(new DateTime().getMillisOfSecond()); // 174
// Formatted
// 2015-09-28 17:50:25.756
System.out.println(new Timestamp(System.currentTimeMillis()));
// 2015-09-28T17:50:25.772
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));
// Java 8
// 2015-09-28T17:50:25.810
System.out.println(LocalDateTime.now());
// joda time
// 2015-09-28 17:50:25.839
System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));
Con Java 8 y posteriores, use el paquete java.time .
ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();
ZonedDateTime.now()es un método estático que devuelve la fecha y hora actual del reloj del sistema en la zona horaria predeterminada. Todos los métodos de obtención devuelven un intvalor.
LocalDateTimees precisamente la clase incorrecta para esto. Carente de cualquier concepto de zona horaria o compensar-from-UTC, que no puede ser usado para rastrear un momento específico, es no un punto en la línea de tiempo. Utilice Instant, ZonedDateTimeo en su OffsetDateTimelugar.
ZonedDateTime.
ZonedDateTime.now( // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
ZoneId.of( "America/Montreal" ) // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMinute() // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.
42
ZonedDateTimePara capturar el momento actual como se ve en la hora del reloj de pared que usa la gente de una región en particular (una zona horaria), use ZonedDateTime .
Una zona horaria es crucial para determinar una fecha. Para un momento dado, la fecha varía en todo el mundo según la zona. Por ejemplo, unos minutos después de la medianoche en París, Francia es un nuevo día, mientras que todavía es “ayer” en Montreal, Québec .
Si no se especifica ninguna zona horaria, la JVM aplica implícitamente su zona horaria predeterminada actual. Ese valor predeterminado puede cambiar en cualquier momento durante el tiempo de ejecución (!), Por lo que sus resultados pueden variar. Es mejor especificar la zona horaria deseada / esperada explícitamente como argumento.
Especifique un nombre de zona horaria adecuado en el formato de continent/region, por ejemplo America/Montreal,Africa/Casablanca o Pacific/Auckland. Nunca use el 3-4 abreviatura de letras tales como ESTo IST, ya que son no verdaderas zonas de tiempo, no estandarizados, y ni siquiera único (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Llame a cualquiera de los muchos captadores para extraer partes de la fecha y hora.
int year = zdt.getYear() ;
int monthNumber = zdt.getMonthValue() ;
String monthName = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ; // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int dayOfMonth = zdt.getDayOfMonth() ;
String dayOfWeek = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
int hour = zdt.getHour() ; // Extract the hour from the time-of-day.
int minute = zdt.getMinute() ;
int second = zdt.getSecond() ;
int nano = zdt.getNano() ;
Las clases java.time se resuelven en nanosegundos . Su pregunta solicitó la fracción de segundo en milisegundos . Obviamente, puede dividir por un millón para truncar nanosegundos a milisegundos, a costa de una posible pérdida de datos. O use la TimeUnitenumeración para tal conversión.
long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;
DateTimeFormatterPara producir una Stringcombinación de fragmentos de texto, use DateTimeFormatterclass. Busque Stack Overflow para obtener más información sobre esto.
InstantPor lo general, es mejor realizar un seguimiento de los momentos en UTC. Para ajustar de una fecha y hora dividida en zonas a UTC, extraiga un archivo Instant.
Instant instant = zdt.toInstant() ;
Y vuelve de nuevo.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;
LocalDateTimeUn par de otras Respuestas usan la LocalDateTime clase. Esa clase no es apropiada para el propósito de rastrear momentos reales, momentos específicos en la línea de tiempo, ya que intencionalmente carece de cualquier concepto de zona horaria o desviación de UTC.
Entonces, ¿para qué LocalDateTimesirve? Úselo LocalDateTimecuando desee aplicar una fecha y hora a cualquier localidad o todas las localidades , en lugar de una localidad específica.
![]()
Por ejemplo, la Navidad de este año comienza en el LocalDateTime.parse( "2018-12-25T00:00:00" ). Ese valor no tiene significado hasta que aplica una zona horaria (a ZoneId) para obtener un ZonedDateTime. La Navidad ocurre primero en Kiribati , luego en Nueva Zelanda y el Lejano Oriente de Asia. Horas más tarde comienza la Navidad en India. Más hora después en África y Europa. Y todavía no es Navidad en las Américas hasta varias horas después. Navidad a partir de cualquiera de un lugar debe ser representado con ZonedDateTime. La Navidad en todas partes se representa con a LocalDateTime.
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, y SimpleDateFormat.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No se necesitan cuerdas, no se necesitan java.sql.*clases.
¿Dónde obtener las clases java.time?
O use java.sql.Timestamp. El calendario es un poco pesado, recomendaría no usarlo en el código de producción. Joda es mejor.
import java.sql.Timestamp;
public class DateTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Timestamp(System.currentTimeMillis()));
}
}
new Date()aquí. Pero, ¿cómo obtendría las partes separadas fácilmente según lo solicitado?
java.sql.Timestampfue suplantado por java.time.Instantla llegada de JDBC 4.2.
en java 7 Calendar una línea
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())
Mire la documentación de la API para la clase java.util.Calendar y sus derivados (puede que le interese específicamente la clase GregorianCalendar).
java.util.Date, java.util.Calendary java.text.SimpleDateFormatahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y versiones posteriores. Consulte el tutorial de Oracle .
Calendario ahora = nuevo Calendario () // o nuevo GregorianCalendar (), o cualquier sabor que necesite
ahora MES ahora HORA
etc.
MONTHy HOURson constantes estáticas de Calendar, no propiedades de instancia.