Ich muss den aktuellen Zeitstempel in Java mit dem Format MM/DD/YYYY h:mm:ss AM/PM
abrufen.
Zum Beispiel: 06/01/2000 10:01:50 AM
Ich brauche es auch, um Threadsafe zu sein.
Kann ich so etwas nutzen?
Java.util.Date date = new Java.util.Date();
System.out.println(new Timestamp(date.getTime()));
Oder die Beispiele unter link here .
Die Threadunsicherheit von SimpleDateFormat
sollte kein Problem sein, wenn Sie sie nur innerhalb desselben Methodenblocks erstellen, in dem Sie sie verwenden. Mit anderen Worten, Sie sind nicht sie als statische oder Instanzvariable einer Klasse zuweisen und in einer oder mehreren Methoden wiederverwenden, die von mehreren Threads aufgerufen werden können. Nur so wird die Threadunsicherheit von SimpleDateFormat
offen gelegt. Sie können jedoch dieselbe SimpleDateFormat
-Instanz innerhalb desselben Methodenblocks sicher wiederverwenden, als würde nur der aktuelle Thread darauf zugreifen.
Die Java.sql.Timestamp
-Klasse, die Sie dort verwenden, sollte nicht missbraucht werden, da sie spezifisch für die JDBC-API ist, um einen TIMESTAMP
/DATETIME
-Spaltentyp in einer SQL-Datenbank speichern oder abrufen zu können und ihn von/in Java.util.Date
zu konvertieren.
Also sollte dies tun:
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
Druckt einen Zeitstempel in Java mit 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()));
}
}
Dies druckt:
2014-08-07 17:34:16.664
Einen Zeitstempel in Java mit SimpleDateFormat auf einem Einzeiler drucken.
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()));
}
}
Drucke:
08/14/2014 14:10:38
Java-Datumsformat-Legende:
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
Versuchen Sie diese einzeilige Lösung:
import Java.util.Date;
String timestamp =
new Java.text.SimpleDateFormat("MM/dd/yyyy h:mm:ss a").format(new Date());
Die Tatsache, dass SimpleDateFormat
nicht thread-sicher ist, bedeutet nicht, dass Sie es nicht verwenden können. Dies bedeutet nur, dass Sie keine einzige Instanz (möglicherweise, aber nicht unbedingt static
) verwenden dürfen, auf die von mehreren Threads gleichzeitig zugegriffen wird.
Stellen Sie stattdessen sicher, dass Sie für jeden Thread ein neues SimpleDateFormat
erstellen. Instanzen, die als lokale Variablen innerhalb einer Methode erstellt wurden, sind per Definition sicher, da sie von keinem gleichzeitigen Thread aus erreichbar sind.
Sie könnten möchten einen Blick auf die Klasse ThreadLocal
werfen, obwohl ich empfehlen würde, einfach eine neue Instanz zu erstellen, wo immer Sie eine benötigen. Sie können die Formatdefinition natürlich irgendwo als static final String DATE_FORMAT_PATTERN = "...";
definieren und diese für jede neue Instanz verwenden.
Ab Java 8+ können Sie das Paket Java.time verwenden. Verwenden Sie insbesondere DateTimeFormatterBuilder und DateTimeFormatter , um die Muster und Literale zu formatieren.
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));
Die Ausgabe ...
06/22/2015 11:59:14 AM
Oder wenn Sie eine andere Zeitzone … wünschen
// 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()));
Die Ausgabe ...
06/22/2015 12:38:42 PM
06/22/2015 02:08:42 AM
06/22/2015 12:53:42 PM
Sie können Java.util.Date
mit direktem Datumsformat verwenden:
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
Hier ist derselbe Code, jedoch unter Verwendung der Drittanbieter-Bibliothek Joda-Time 2.3.
Im wirklichen Leben würde ich eine Zeitzone angeben, da es normalerweise eine schlechte Praxis ist, sich auf die Standardzone zu verlassen. Aber hier der Einfachheit halber weggelassen.
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 );
Wann laufen…
nowAsString: 11/28/2013 11:28:15 PM
Ich habe es so gemacht, als ich eine Zeitschrift wollte
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
Hoffe, es hilft :) Als Neuling denke ich, es ist selbsterklärend
Ich denke, dass Sie auch importieren müssen Java.text.SimpleDateFormat; Header dafür zu arbeiten :))
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);
manchmal ist das auch nützlich.
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());}}
Beispielausgabe: Mon Jul 03 19:07:15 IST 2017