Besoin d'obtenir l'horodatage actuel en Java


J'ai besoin d'obtenir l'horodatage actuel en Java, avec le format 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 au lien ici.

Author: Eric Leschinski, 2011-12-01

11 answers

Le threadunsafety de SimpleDateFormat ne devrait pas être un problème si vous le créez simplement dans le même bloc de méthode que vous l'utilisez. En d'autres termes, vous ne l'affectez pas en tant que variable statique ou d'instance d'une classe et la réutilisez dans une ou plusieurs méthodes qui peuvent être invoquées par plusieurs threads. Ce n'est que de cette façon que la sécurité de SimpleDateFormat sera exposée. Vous pouvez cependant réutiliser en toute sécurité la même instance SimpleDateFormat dans le même bloc de méthode que celle accessible par le thread actuel seulement.

De plus, la classe java.sql.Timestamp que vous utilisez ne doit pas être abusée car elle est spécifique à l'API JDBC afin de pouvoir stocker ou récupérer un TIMESTAMP/DATETIME tapez une colonne dans une base de données SQL et convertissez-la de/en java.util.Date.

Donc, cela devrait faire:

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
 69
Author: BalusC, 2013-02-27 10:39:42

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

Ceci imprime:

2014-08-07 17:34:16.664

Imprimer un horodatage en Java à l'aide de SimpleDateFormat sur un one-liner.

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

    }

}

Imprime:

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
 14
Author: Eric Leschinski, 2014-08-14 18:35:31

Essayez cette solution à une seule ligne:

import java.util.Date;
String timestamp = 
    new java.text.SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(new Date());
 8
Author: Prasad D, 2014-08-07 21:34:54

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 instance (potentiellement, mais pas nécessairement static) accessible à partir de plusieurs threads à la fois.

Au Lieu de cela, assurez-vous de créer un nouveau SimpleDateFormat pour chaque thread. 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 à partir de threads concurrents.

Vous pourriez vouloir prendre un regardez la classe ThreadLocal, bien que je recommande de simplement créer une nouvelle instance partout où vous en avez besoin. Vous pouvez, bien sûr, avoir la définition de format définie comme un static final String DATE_FORMAT_PATTERN = "..."; quelque part et l'utiliser pour chaque nouvelle instance.

 6
Author: Daniel Schneller, 2011-12-01 16:52:05

Java.temps

À partir de Java 8+, vous pouvez utiliser le java.paquet de temps . Plus précisément, utilisez DateTimeFormatterBuilder et DateTimeFormatter pour formater les modèles et les littéraux.

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 sortie ...

06/22/2015 11:59:14 AM

Ou si vous voulez un fuseau horaire différent {

// 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 sortie ...

06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM
 5
Author: Madan Sapkota, 2015-06-24 16:48:31

Vous pouvez utiliser {[1] } avec le format de chaîne de date directe:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
 3
Author: Krunal, 2018-04-19 11:01:15

Joda-Temps

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

Dans la vraie vie, je spécifierais un fuseau horaire, car s'appuyer sur la zone par défaut est généralement une mauvaise pratique. Mais omis ici pour la simplicité de 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 );

Lors de l'exécution...

nowAsString: 11/28/2013 11:28:15 PM
 2
Author: Basil Bourque, 2014-08-07 21:45:20

Je l'ai fait comme ça quand je voulais un tmiestamp

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

J'espère que cela aide:) En tant que débutant, je pense que c'est explicite

Je pense que vous avez également besoin d'importer java.texte.SimpleDateFormat; en-tête pour que cela fonctionne :))

 1
Author: MG97, 2016-09-12 10:04:15
String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt);
 0
Author: hurtledown, 2011-12-01 17:41:19

Eh bien, parfois, cela est également utile.

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

Exemple de sortie: Mon Jul 03 19:07:15 IST 2017

 0
Author: Saurabh Kumar, 2017-07-03 16:12:47
    public class TimeStampExample {

        private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());

        public static void main(String[] args) {


        System.out.println(timestamp);

        System.out.println(timestamp.getTime());

        Instant instant = timestamp.toInstant();

        System.out.println(instant);

        System.out.println(instant.toEpochMilli());



            Timestamp timestamp = new Timestamp(System.currentTimeMillis());
            System.out.println(timestamp);


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


            System.out.println(timestamp.getTime());


            System.out.println(sdf.format(timestamp));

        }

    }
 0
Author: Neeraj Gahlawat, 2018-05-25 06:40:48