50 votes

Besoin d'obtenir l'horodatage actuel en Java

J'ai besoin d'obtenir l'horodatage actuel en Java, avec le format suivant MM/DD/YYYY h:mm:ss AM/PM ,

Par exemple : 06/01/2000 10:01:50 AM

J'ai besoin que ce soit Threadsafe aussi.

Puis-je utiliser quelque chose comme ça ?

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

Ou les exemples discutés sur le lien aquí .

71voto

BalusC Points 498232

La non sécurité des fils de SimpleDateFormat ne devrait pas poser de problème si vous le créez dans le même bloc de méthodes que celui où vous l'utilisez. En d'autres termes, vous êtes pas en l'assignant comme variable statique ou d'instance d'une classe et en la réutilisant dans une ou plusieurs méthodes qui peuvent être invoquées par plusieurs threads. Ce n'est que de cette façon que la threadunsafety de SimpleDateFormat seront exposés. Vous pouvez cependant réutiliser en toute sécurité le même SimpleDateFormat dans le même bloc de méthodes, car seul le thread actuel y aurait accès.

En outre, le java.sql.Timestamp que vous utilisez ici ne doit pas être utilisée de manière abusive, car elle est spécifique à l'API JDBC et permet de stocker ou de récupérer un fichier de type TIMESTAMP / DATETIME type de colonne dans une base de données SQL et le convertir de/en java.util.Date .

Donc, ça devrait aller :

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

15voto

Eric Leschinski Points 14289

Imprimez un horodatage en java, en utilisant le module 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()));
    }
}

Cette empreinte :

2014-08-07 17:34:16.664

Imprimez un horodatage en Java en utilisant SimpleDateFormat en une seule ligne.

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()));

    }

}

Imprimés :

08/14/2014 14:10:38

Légende du format de date Java :

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

9voto

Prasad D Points 47

Essayez cette solution en une seule ligne :

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

7voto

Daniel Schneller Points 6417

Le fait que SimpleDateFormat n'est pas thread-safe ne signifie pas que vous ne pouvez pas l'utiliser. Ce que cela signifie seulement, c'est que vous ne devez pas utiliser une seule (potentiellement, mais pas nécessairement static ) à laquelle on accède depuis plusieurs threads à la fois.

Au lieu de cela, assurez-vous de créer un nouveau SimpleDateFormat pour chaque fil. Les instances créées en tant que variables locales à l'intérieur d'une méthode sont sûres par définition, car elles ne peuvent être atteintes par aucun thread concurrent.

Vous pourrait voulez jeter un coup d'oeil à la ThreadLocal mais je vous recommande de créer une nouvelle instance chaque fois que vous en avez besoin. Vous pouvez, bien entendu, définir la définition du format en tant qu'élément de la classe static final String DATE_FORMAT_PATTERN = "..."; quelque part et l'utiliser pour chaque nouvelle instance.

2voto

Basil Bourque Points 8938

Joda-Time

Voici le même type de code mais en utilisant la bibliothèque tierce partie Joda-Time 2.3.

Dans la vie réelle, je spécifierais un fuseau horaire car se fier à la zone par défaut est généralement une mauvaise pratique. Mais elle est omise ici pour simplifier l'exemple.

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 );

Quand on court

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X