Wie konvertiere ich das aktuelle Datum in einen String in Java?


Antworten:


215
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

Verwenden Sie eine Kombination aus diesem und der Antwort unten für den Zeitstring. C:
php_coder_3809625

@ Ian Purton Ist das String-Datum in UTC tz ..?
Kanagavelu Sugumar

Zu Ihrer Information, diese problematischen Klassen sind jetzt Legacy-Klassen, die durch die Klassen java.time ersetzt werden. Siehe Oracle Tutorial .
Basil Bourque

61
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Von hier genommen


Beste Antwort für die Verwendung von Kalender anstelle von Datum.
Zufällig

5
Ich bin verwirrt. In welchem ​​Universum ist Calendarwünschenswerter als Date?
Jasonmp85

1
Zu Ihrer Information, diese problematischen Klassen sind jetzt Legacy-Klassen, die durch die Klassen java.time ersetzt werden. Siehe Oracle Tutorial .
Basil Bourque

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Tut mir leid, dass ich zu viel erreicht habe.
Jasonmp85

2
Das von dieser Methode verwendete Format ist schrecklich. Außerdem wird implizit die aktuelle Standardzeitzone Ihrer KVM angewendet, sodass Ihre Ergebnisse variieren. Und diese problematischen Klassen sind jetzt Legacy-Klassen, die durch die java.time-Klassen ersetzt werden. Siehe Oracle Tutorial .
Basil Bourque


13

tl; dr

LocalDate.now()
         .toString() 

2017-01-23

Es ist besser, die gewünschte / erwartete Zeitzone explizit anzugeben.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

Die moderne Methode ab Java 8 und höher ist das Java.time- Framework.

Geben Sie die Zeitzone an, da das Datum zu einem bestimmten Zeitpunkt weltweit variiert.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017-01-23

Standardmäßig erhalten Sie einen String im Standardformat ISO 8601 .

Verwenden Sie für andere Formate die java.time.format.DateTimeFormatterKlasse.


Über java.time

Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date, Calendar, & SimpleDateFormat.

Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .

Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für java.sql.*Klassen.

Woher bekomme ich die java.time-Klassen?

Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval, YearWeek, YearQuarter, und mehr .


9

Schneller :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
Benötigt org.apache.commons
Josiah Yoder

1

Für die Zeit als JJJJ-MM-TT

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

Und die Library of DateTime ist:

import org.joda.time.DateTime;


Und aus welcher Bibliothek stammt DateTime? Eine Antwort zum Stapelüberlauf sollte eine Erklärung enthalten, da diese Site mehr als eine Snippet-Bibliothek sein soll.
Basil Bourque

0

Die meisten Antworten sind / waren gültig. Durch die neue JAVA-API-Änderung für die Datumsbehandlung wurde sichergestellt, dass frühere Unklarheiten bei der Behandlung von Java-Datumsangaben verringert werden.

Sie erhalten eine veraltete Nachricht für ähnliche Anrufe.

new Date() // deprecated

Bei dem obigen Aufruf musste der Entwickler davon ausgehen, dass ein neues Date-Objekt das Date-Objekt mit dem aktuellen Zeitstempel liefert. Dieses Verhalten ist in anderen Java-API-Klassen nicht konsistent.

Die neue Methode hierfür ist die Verwendung der Kalenderinstanz .

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

Auch hier ist die Namenskonvention nicht perfekt, aber sie ist sehr gut organisiert. Für eine Person wie mich, die es schwer hat, Dinge zu überfallen, aber niemals etwas vergessen würde, wenn es logisch klingt / erscheint, ist dies ein guter Ansatz.

Dies ist mehr gleichbedeutend mit dem wirklichen Leben

  1. Wir bekommen ein Kalenderobjekt und suchen nach der Zeit darin. (Sie müssen sich fragen, dass kein Körper Zeit aus einem Kalender bekommt, deshalb habe ich gesagt, dass es nicht perfekt ist. Aber das ist ein ganz anderes Thema.)
  2. Dann möchten wir das Datum in einem einfachen Textformat haben, also verwenden wir eine SimpleDateFormat-Dienstprogrammklasse, die uns beim Formatieren des Datums aus Schritt 1 hilft. Ich habe JJJJ, MM, TT als Parameter im Format verwendet. Unterstützte Datumsformatparameter

Eine weitere Möglichkeit, dies zu tun, ist die Verwendung der Joda-Zeit-API

new DateTime().toString("yyyy-MM-dd")

oder das viel Offensichtliche

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

beide geben das gleiche Ergebnis zurück.


Zu Ihrer Information, die störenden alten Datum Zeitklassen wie java.util.Date, java.util.Calendarund java.text.SimpleTextFormatsind jetzt Erbe , durch die verdrängte java.time Klassen. Außerdem befindet sich das Joda-Time- Projekt jetzt im Wartungsmodus , wobei das Team die Migration zu java.time empfiehlt.
Basil Bourque

1
@BasilBourque Das habe ich in meiner Antwort gemeint, dass die am besten gewählte Antwort richtig, aber für einen heutigen Entwickler nicht relevant ist. Schließlich wird Java eine Clock-Klasse haben und Clock.getTime () wäre viel sinnvoller und realer imitierend als Date- oder DateTime- oder Time-Klassen. Java-Entwickler müssen wissen, dass OOPS als etwas begann, das reale Szenarien imitiert.
Swapnil Vargaonkar

Zu Ihrer Information, die ClockImplementierung in Java 8 entspricht genau den Legacy-Klassen. Nur in Java 9 kommt eine neue Implementierung, die den aktuellen Moment mit einer Auflösung von nur Nanosekunden erfassen kann.
Basil Bourque

Ja, das ist der Grund, warum ich "endlich" geschrieben habe. Java wird eine Clock-Klasse haben, die das reale Szenario (OOPS-Konzept) imitiert und den aktuellen Moment anzeigt / erfasst (wie Sie es lieber sagen würden).
Swapnil Vargaonkar

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
Einige Erklärungen zu diesem Code wären wahrscheinlich von Vorteil.
Pyves

1
Die Antwort ist für die Frage nicht relevant. Und nein, Sie können das Datum in keinem StringFormat an Ihre Funktion übergeben.
Jerin Joseph
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.