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