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