2011-12-01 13 views
48

que necesito para obtener la fecha y hora actual en Java, con el formato de MM/DD/YYYY h:mm:ss AM/PM,necesita para obtener fecha y hora actual en Java

Por ejemplo: 06/01/2000 10:01:50 AM

necesito que sea threadsafe también.

¿Puedo utilizar algo como esto?

java.util.Date date = new java.util.Date(); 
System.out.println(new Timestamp(date.getTime())); 

O los ejemplos discutidos en el enlace here.

+2

Si crea SimpleDateFormat en el ámbito de un método que será multi-hilo ... – willcodejavaforfood

+0

Gracias por su entrada y aclarar eso. – user717236

Respuesta

69

El threadunsafety de SimpleDateFormat no debería ser un problema si solo lo creas dentro del mismo bloque de método que usas. En otras palabras, usted es no asignándolo como una variable estática o de instancia de una clase y reutilizándolo en uno o más métodos que pueden ser invocados por múltiples hilos. Solo así se expondrá el subproceso de seguridad de SimpleDateFormat. Sin embargo, puede reutilizar de forma segura la misma instancia SimpleDateFormat dentro del mismo bloque de método, ya que solo se accedería con el hilo actual.

Además, la clase java.sql.Timestamp las que se utilice no debe ser objeto de abuso, ya que es específica a la API JDBC con el fin de ser capaz de almacenar o recuperar un tipo de columna TIMESTAMP/DATETIME en una base de datos SQL y convertirlo desde/a java.util.Date.

Por lo tanto, esto debería hacer:

Date date = new Date(); 
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a"); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); // 12/01/2011 4:48:16 PM 
+1

Gracias por su ayuda. Esto funcionó, ¡gracias! Agradezco su cuenta detallada y concisa de seguridad de subprocesos, con respecto a SimpleDateFormat. Tu vista en Timestamp es usarla exclusivamente para SQL. Eso tiene perfecto sentido. Gracias por tu sabiduría. – user717236

+3

De nada. – BalusC

+1

Solo quería decir que olvidó dos puntos en su segunda línea. Es un error muy leve; simplemente hace que copiar y pegar sea un poco más incómodo. – deinocheirus

5

El hecho de que SimpleDateFormat no es seguro para subprocesos no quiere decir que no se puede utilizar. Lo que eso significa es que no debe usar una sola instancia (potencialmente, pero no necesariamente static) a la que se accede desde varios subprocesos a la vez.

En su lugar, solo asegúrese de crear un SimpleDateFormat nuevo para cada hilo. Las instancias creadas como variables locales dentro de un método son seguras, por definición, porque no se puede acceder desde ningún subproceso simultáneo.

Usted puede que desee echar un vistazo a la clase ThreadLocal, aunque recomendaría que simplemente crear una nueva instancia donde quiera que lo necesite. Por supuesto, puede tener la definición de formato definida como static final String DATE_FORMAT_PATTERN = "..."; en algún lugar y usarla para cada instancia nueva.

+0

También me gustaría darte una marca, como también te mereces. Su conocimiento de este tema es invaluable para mí y para otros que leerán esta pregunta. Muchas gracias por tu tiempo y ayuda. – user717236

0
String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt); 
+0

Gracias por su ayuda. Desafortunadamente esto no funcionó. Obtuve el error de "El método Format (String, Date) no está definido para el tipo String". Espera el tipo de objeto, no el tipo de fecha. – user717236

+3

Pruebe con una minúscula "f" para String.format (...). Los nombres de los métodos en java comienzan con una letra minúscula por convención. –

+1

Muchas gracias. Intenté String str = String.format ("{0: dddd, MMMM d, aaaa hh: mm tt}", nueva Fecha()); y str toma el valor de {0: dddd, MMMM d, aaaa hh: mm tt}. Es decir, no funcionó. – user717236

7

Revise la solución de una sola línea:

import java.util.Date; 
String timestamp = 
    new java.text.SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(new Date()); 
+0

Esto funciona. Escribir más de 1 línea para hacer algo como esto parece ridículo para un lenguaje moderno. –

+0

@AndrewCowenhoven Es más de 1 línea. : D – Andrew

1

Joda-Time

Aquí es el mismo tipo de código, pero utilizando la biblioteca de terceros Joda-Time 2.3.

En la vida real, yo especificaría un time zone, ya que depender de la zona predeterminada suele ser una mala práctica. Pero se omite aquí por simplicidad de ejemplo.

org.joda.time.DateTime now = new DateTime(); 
org.joda.time.format.DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy h:mm:ss a"); 
String nowAsString = formatter.print(now); 

System.out.println("nowAsString: " + nowAsString); 

Cuando se ejecuta ...

nowAsString: 11/28/2013 11:28:15 PM 
13

Imprimir una marca de tiempo en Java, utilizando la java.sql.Timestamp.

import java.sql.Timestamp; 
import java.util.Date; 

public class GetCurrentTimeStamp { 
    public static void main(String[] args){ 
     java.util.Date date= new java.util.Date(); 
     System.out.println(new Timestamp(date.getTime())); 
    } 
} 

Esta impresora:

2014-08-07 17:34:16.664 

Imprimir una marca de tiempo en Java utilizando SimpleDateFormat en una sola línea.

import java.util.Date; 
import java.text.SimpleDateFormat; 

class Runner{ 
    public static void main(String[] args){ 

     System.out.println(
      new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date())); 

    } 

} 

Lienzo:

08/14/2014 14:10:38 

Java leyenda formato de fecha:

G Era designation  Text    AD 
y Year     Year    1996; 96 
M Month in year  Month    July; Jul; 07 
w Week in year   Number    27 
W Week in month  Number    2 
D Day in year   Number    189 
d Day in month   Number    10 
F Day of week in month Number    2 
E Day in week   Text    Tuesday; Tue 
a Am/pm marker   Text    PM 
H Hour in day (0-23) Number    0 
k Hour in day (1-24) Number    24 
K Hour in am/pm (0-11) Number    0 
h Hour in am/pm (1-12) Number    12 
m Minute in hour  Number    30 
s Second in minute  Number    55 
S Millisecond   Number    978 
z Time zone   General time zone Pacific Standard Time; PST; GMT-08:00 
Z Time zone   RFC 822 time zone -0800 
+0

buena explicación! – hnvasa

3

java.time

A partir de Java 8+ puede utilizar el java.time package. Específicamente, use DateTimeFormatterBuilder y DateTimeFormatter para formatear los patrones y literales.

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
     .appendPattern("MM").appendLiteral("/") 
     .appendPattern("dd").appendLiteral("/") 
     .appendPattern("yyyy").appendLiteral(" ") 
     .appendPattern("hh").appendLiteral(":") 
     .appendPattern("mm").appendLiteral(":") 
     .appendPattern("ss").appendLiteral(" ") 
     .appendPattern("a") 
     .toFormatter(); 
System.out.println(LocalDateTime.now().format(formatter)); 

La salida ...

06/22/2015 11:59:14 AM 

O si usted quiere diverso time zone ...

// system default 
System.out.println(formatter.withZone(ZoneId.systemDefault()).format(Instant.now())); 
// Chicago 
System.out.println(formatter.withZone(ZoneId.of("America/Chicago")).format(Instant.now())); 
// Kathmandu 
System.out.println(formatter.withZone(ZoneId.of("Asia/Kathmandu")).format(Instant.now())); 

La salida ...

06/22/2015 12:38:42 PM 
06/22/2015 02:08:42 AM 
06/22/2015 12:53:42 PM 
+0

También podemos usar 'DateTimeFormatter.ofPattern (" MM/dd/aaaa hh: mm: ss a ")' para obtener una instancia de DateTimeFormatter :) – Arkantos

1

lo hice como esto cuando quería un tmiestamp

String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime()); 

espero que ayude :) Como novato creo que es auto-explicativo

Creo que también necesita java.text.SimpleDateFormat importación; cabecera para que funcione :))

1

Puede hacer uso de java.util.Date con formato directo:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date()); 
0

bien a veces esto también es útil.

import java.util.Date; 
public class DisplayDate { 
public static void main(String args[]) { 
    // Instantiate an object 
    Date date = new Date(); 

    // display time and date 
    System.out.println(date.toString());}} 

resultado de ejemplo:Mon Jul 03 19:07:15 IST 2017

Cuestiones relacionadas