web-dev-qa-db-fra.com

Besoin d'obtenir l'horodatage actuel en Java

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

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

J'ai besoin que ce soit aussi Threadsafe.

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

49
user717236

La 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 êtes non en l'affectant en tant que variable statique ou instance d'une classe et en le réutilisant dans une ou plusieurs méthodes pouvant être invoquées par plusieurs threads. Ce n'est que de cette manière que la sécurité filaire 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 celui auquel le thread actuel aurait accès.

De même, la classe Java.sql.Timestamp que vous utilisez ne doit pas être utilisée car elle est spécifique à l'API JDBC pour pouvoir stocker ou récupérer un type de colonne TIMESTAMP/DATETIME dans une base de données SQL et le convertir 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
BalusC

Imprimer un horodatage en Java, à l'aide de 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()));
    }
}

Cela imprime:

2014-08-07 17:34:16.664

Imprimer un horodatage en Java en utilisant SimpleDateFormat sur une 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()));

    }

}

Impressions:

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
Eric Leschinski

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());
8
Prasad D

Le fait que SimpleDateFormat ne soit pas thread-safe ne signifie pas que vous ne pouvez pas l'utiliser . Cela signifie seulement que vous ne devez pas utiliser une seule instance (potentiellement, mais pas nécessairement static) accessible simultanément à partir de plusieurs threads.

Au lieu de cela, assurez-vous simplement de créer une nouvelle variable SimpleDateFormat pour chaque thread. Les instances créées en tant que variables locales dans une méthode sont sécurisées par définition, car elles ne peuvent pas être atteintes à partir de threads simultanés.

Vous pourriez vouloir jeter un coup d'œil sur la classe ThreadLocal, bien que je vous recommande de créer simplement une nouvelle instance chaque fois que vous en avez besoin. Vous pouvez bien sûr définir la définition du format en tant que static final String DATE_FORMAT_PATTERN = "..."; et l’utiliser pour chaque nouvelle instance. 

6
Daniel Schneller

Java.time

A partir de Java 8+, vous pouvez utiliser le paquet Java.time . 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));

Le résultat ...

06/22/2015 11:59:14 AM

Ou si vous voulez différent fuseau horaire

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

Le résultat ...

06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM
5
Madan Sapkota

Vous pouvez utiliser Java.util.Date avec le format de chaîne de date directe:

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

Joda-Time

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 le recours à 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 );

Quand couru…

nowAsString: 11/28/2013 11:28:15 PM
2
Basil Bourque

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

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

J'espère que ça aide :) En tant que débutant, je pense que cela va de soi

Je pense que vous devez également importer Java.text.SimpleDateFormat; en-tête pour que ça fonctionne :))

1
MG97
    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
Neeraj Gahlawat
String.format("{0:dddd, MMMM d, yyyy hh:mm tt}", dt);
0
hurtledown

bien parfois c'est aussi 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
Saurabh Kumar