2016-07-11 11 views
2

Ich schreibe ein Java-Programm und ich habe für einige Zeit mit allen Date, DateTime und so weiter Teile der Java-Programmierung festgefahren.Verwenden von Datum und Datum nur in Java

Ich möchte nur ein DATE-Objekt haben. Ich habe eine Klasse:

Deployment.java

public class Deployment { 

    int id; 
    LocalDate deviceDeploymentDate; //I'm unsure what this should be 

    public Deployment(int id, LocalDate deviceDeploymentDate) { 
     this.id = id; 
     this.deviceDeploymentDate = deviceDeploymentDate; 
    } 

    public Deployment() { 

    } 

    public LocalDate getDeviceDeploymentDate() { 
     return deviceDeploymentDate; 
    } 

    public void setDeviceDeploymentDate(LocalDate date) { 
     this.deviceDeploymentDate = date; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

Und ich habe einen Date Picker in meiner GUI.

JDatePickerImpl

Von diesem Date Picker kann ich das Datum in einem String-Format erhalten (und es auch Jahr int ändern, int Monat und int Datum OFC falls erforderlich). Davon möchte ich eine Art von DATE in meinem Deployment-Objekt speichern, und ich möchte nicht, dass die Zeit dazu gehört.

Frage

Welche Datentyp sollte ich dies zu tun benutzen? Und wie würde ich tun?

Misc

Ich habe kurz an Joda Zeit sah, aber nicht gelungen, einen LOCALDATE/Datetime-Typen entweder aus dem String oder ganzen Zahlen zu erzeugen, die ich aus dem Date Picker bekommen kann.

+1

Sie den Typ verwenden könnten Sie bereits verwenden sind, und stellen Sie die Zeit Teil 00: 00:00 Uhr. Wenn Sie dann für die Ausgabe formatieren, zeigen Sie nicht die Zeitteile an. –

+0

Das könnte eine Möglichkeit sein, aber ich würde lieber einen Datentyp verwenden, der nur das Datumselement enthält.Der Grund ist, dass ich das Element in einer SQL-Datenbank speichern werde und, soweit ich es verstanden habe, speichert die SQL-Datenbank auch nur einen "String" vom Typ "yyyy-MM-dd" (Dieser so genannte "String "ist jedoch ein Datumstyp. – Zeliax

+1

@Zeliax Nein, keine seriöse Datenbank speichert Datum-Uhrzeit-Typen als Zeichenfolgen. Während Sie nach einer Zeichenfolgendarstellung des Werts fragen können, der für Sie als Ergebnis einer Abfrage generiert wird, verwechseln Sie das nicht string mit dem tatsächlichen Wert, der in der Datenbank gespeichert ist Der interne Speicher wird effizienter implementiert als Strings Aber Sie haben recht, wenn Sie einen geeigneten Datentyp in Java verwenden möchten: Siehe ['LocalDate'] (http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) Klasse in Java –

Antwort

2

Sie können weiterhin LocalDate (laut Davids Kommentar) verwenden und DateTimeFormatter von Joda Time wie folgt verwenden, um String in LocalDate zu konvertieren.

+0

Gibt es einen bestimmten Grund hinter der Tatsache, dass Sie sie als Finale angeben? – Zeliax

3

Joda-Time ist großartig, wird aber seit der Date-Time API in Java 8 und höher meist nicht benötigt. Das Team hinter Joda-Time berät auch Benutzer auf Java 8 oder höher, die Standard-API zu verwenden:

Beachten Sie, dass von Java SE 8 ab, werden die Benutzer aufgefordert, java.time (JSR-310) zu migrieren - ein Kernteil des JDK, das dieses Projekt ersetzt.

Angesichts dieser sollten Sie LocalDate von der Standard-API, java.time verwenden. Ihre Deployment Klasse kann jetzt genauso aussehen, wie Sie es jetzt tun, stellen Sie nur sicher, dass Sie das richtige Paket (java.time.LocalDate) importieren.

Da Sie Zugriff auf die Felder haben (Jahr, Monat und Tag), können Sie eine der of() Methoden in der API verwenden:

LocalDate.of(year, month, day); 

Beachten Sie, dass month und day beginnt mit 1, dh Januar ist Monat 1. In den vorherigen Datum/Kalender-APIs begann die Monatszählung mit 0, dh Januar war Monat 0. Mit anderen Worten, seien Sie vorsichtig, wenn Sie die beiden APIs mischen.

By the way, java.time hat eine vordefinierte Month Enum, die stattdessen nützlich sein könnten ganze Zahlen für Monate mit:

LocalDate localDate = LocalDate.of(2012, Month.January, 31); 
+1

Die meisten * java. Die time * -Funktionalität wird im [ThreeTen-Backport] (http://www.threeten.org/threetenbp/) -Projekt zurück zu Java 6 & 7 portiert ect. Weitere Anpassung an Android im Projekt [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP). Das Joda-Time Team empfiehlt die Migration zu java.time. –