"Datestamp" to Date oder Timestamp

PierreDole

Mitglied
Moin,
ich bekomme ein Datum im Format yyyyMMdd (20210227) und würde gerne wissen, wie man das am besten in ein Date- oder Timestamp-Object umwandelt. Gibt es in Java schon etwas Fertiges, was das kann oder muss ich das per Hand machen?
 
K

kneitzel

Gast
Gegooglet habe ich natürlich, aber... naja, manchmal verfolge ich beim Googlen den falschen Ansatz und finde nichts. ;)
Ja, das ist am Anfang leider so - aber bleib dran. Mit der Zeit werden die Treffer immer besser, weil man ggf. bessere Begriffe eingibt beim suchen.
(Das macht es halt wichtig, es immer erst selbst zu probieren - das war auch der Sinn hinter der Bemerkung - nicht dass es falsch verstanden wurde als "Anmache" oder so.)
 

PierreDole

Mitglied
Ja, das ist am Anfang leider so - aber bleib dran. Mit der Zeit werden die Treffer immer besser, weil man ggf. bessere Begriffe eingibt beim suchen.
(Das macht es halt wichtig, es immer erst selbst zu probieren - das war auch der Sinn hinter der Bemerkung - nicht dass es falsch verstanden wurde als "Anmache" oder so.)
Ja, hast recht. Willst gar nicht wissen, wie ich mich bei der Namensfindung für Klassen und Methoden anstelle. Bin ständig am Ändern. Zum Glück hat Eclipse den Refactor. :)
 
K

kneitzel

Gast
Ja, hast recht. Willst gar nicht wissen, wie ich mich bei der Namensfindung für Klassen und Methoden anstelle. Bin ständig am Ändern. Zum Glück hat Eclipse den Refactor. :)
Du änderst regelmäßig Namen von Methoden und Klassen, wenn Dir ein besserer Name einfällt? Das ist eine super Praxis! So Refactorings solltest Du wirklich beibehalten und somit dafür sorgen, dass Code immer gut lesbar bleibt oder zumindest lesbarer wird! Also top Vorgehen!
 

Thallius

Top Contributor
Du würdest für ein Datum innerhalb der Anwendung String als Datentyp nutzen? o_O
Jupp mache ich immer. Solange ich nicht mit dem Datum rechnen muss sondern höchstens vergleichen, speichere ich es immer als iso8601. das ist speichersparend, Performant und es muss nichts konvertiert werden bei Datenbank Zugriffen. Da ich auch immer alles als utc iso8601 speichere habe ich auch nie irgendwelche Probleme mit Zeitzonen Und muss mich nicht mit irgendwelchen lokalen rumärgern
 

mrBrown

Super-Moderator
Mitarbeiter
Solange ich nicht mit dem Datum rechnen muss sondern höchstens vergleichen, speichere ich es immer als iso8601. das ist speichersparend
Als String braucht es etwa 2,5 mal so viel Platz wie als LocalDate (schwankt je nach JVM-Version und Parametern).

Alles was man mit nem Datum machen kann geht mit LocalDate schneller als mit Stings. Das von dir aus Beispiel genannte Vergleichen ist zB mit LocalDate immer schneller als mit Strings, in normalen Anwendungen dürfte das locker doppelt bis dreimal so schnell sein.

es muss nichts konvertiert werden bei Datenbank Zugriffen
Das ist das einzige, was mit Strings schneller wäre – aber selbst das Konvertieren des Strings in ein LocalDate ist in der gleichen Größenordnung wie ein einziger String-Vergleich. Im Vergleich zu dem restlichen Overhead der Datenbankverbindung ist das nahezu nie relevant.
Wenn doch, fährt man in den meisten Fällen besser wenn, man direkt mit Epoch Days und gar nicht mit String arbeitet, dann fällt auch der Overhead auf Datenbankseite weg.

Da ich auch immer alles als utc iso8601 speichere habe ich auch nie irgendwelche Probleme mit Zeitzonen Und muss mich nicht mit irgendwelchen lokalen rumärgern
Ein LocalDate hat auch keine Zeitzone.
 

PierreDole

Mitglied
Das war jetzt sehr interessant. In den C#-Foren hieße es schnell, daß bei den Gigabytes an Speicher und Gigahertz an Geschwindigkeit, die ein Rechner heutzutage hat, es keine Rolle spielt welchen Datentyp man für ein Datum verwendet und wie rum das ganze schneller verarbeitet wird. Heißt das, daß man in der Java-Programmierung seinen Code viel mehr auf Performence optimiert?
 

mrBrown

Super-Moderator
Mitarbeiter
Das war jetzt sehr interessant. In den C#-Foren hieße es schnell, daß bei den Gigabytes an Speicher und Gigahertz an Geschwindigkeit, die ein Rechner heutzutage hat, es keine Rolle spielt welchen Datentyp man für ein Datum verwendet und wie rum das ganze schneller verarbeitet wird. Heißt das, daß man in der Java-Programmierung seinen Code viel mehr auf Performence optimiert?
Performance sollte bei der Entscheidung keine vorrangige Rolle spielen. Man nimmt den Typ, der am besten passt – und für ein Datum ist das eben ein passender Datums-Typ, zB LocalDate. Es gibt absolut keinen „“Performance-Grund“, für ein Datum einen String zu nutzen.
Mein vorheriger Beitrag sollte auch nur deutlich machen, dass das Performance-Argument von @Thallius eine völlig dumme Ausrede für schlechtes Design ist.
 

PierreDole

Mitglied
Ich fragte, da ich das oben angeführte Datum als int speichere. Bekommen tue ich es aus einer Json-Datei, die nicht von mir ist (kann also das Format des Datums nicht ändern). Ich fand es mit int angenehmer die Daten miteinander zu vergleichen.

Java:
public List<Game> getSchedule(int seasonYear, int fromGameDate, int toGameDate)
    {
        Schedule schedule = getSchedule(seasonYear);
        
        return schedule.league.standard.stream()
                .filter((x) -> x.startDateEastern >= fromGameDate && x.startDateEastern <= toGameDate)
                .collect(Collectors.toList());
    }

Als LocalDate brauche ich es nur für die Anzeige. Auf der anderen Seite muss ich das Datum auch in String umwandeln, da einige URLs der Json-Dateien das Datum beinhalten, z.B. "http://data.nba.net/prod/v1/{gameDate}/{gameId}_pbp_{period}.json".

Sollte ich das Datum als LocalDate speichern oder kann man es in diesem Fall als int lassen?
 
K

kneitzel

Gast
An der Stelle möchte ich Dich einfach einmal auf https://clean-code-developer.de/ hinweisen. Da finden sich viele interessante Punkte, so man sich für Software Entwicklung interessiert und über die ersten Anfänge hinaus gekommen ist.

Und ein wichtiger Punkte ist da halt recht schnell schon

Das Wort Optimierungen ist aber genau zu definieren, denn Software Entwickler optimieren ständig Code (hoffentlich)!
Es ist zu unterscheiden zwischen Optimierungen bezüglich Laufzeit und Refactorings. Man optimiert den Code auf Lesbarkeit. Da ist dann auch die Signatur von @mrBrown wichtig mit dem Zitat von Kent Beck: "Any fool can write code that a computer can understand. Good programmers write code that humans can understand.". Und das ist ein Bereich, in dem viele wirklich in die gleiche Kerbe schlagen. Uncle Bob (Robert C. Martin) bringt z.B. eine Regel, nach der jeder Checkin den Code lesbarer machen muss.

Aber Laufzeitoptimierungen werden nicht durchgeführt! Und wenn das doch notwendig ist, dann wird erst analysiert und dann entschieden, was wie optimiert werden kann. Das sind in der Regel keine kleinen Umstellungen. Die sind einfach nicht ausschlaggebend. Was bringt es, einen Faktor x zu optimieren? Selbst wenn es doppelt so schnell wird, wird es weiterhin Probleme haben. Denn es geht ja um Algorithmen, die generell ausgetauscht werden. Wenn Du etwas hast, das z.B. in O(n²) läuft, dann bringt eine Optimierung um einen konstanten Faktor nichts. Da muss man dann überlegen, was man optimieren kann. Dann klappt evtl. ein Zugriff in O(n)...

Was man aber auch von Optimierungen unterscheiden sollte:
Best Practices. Es gibt ein paar Dinge, die man als Best Practice ansehen kann. "Effective Java" wäre da ein Buch, das viele einzelne Punkte aufgreift und erläutert.

Und wenn ich z.B. eine List sehe, bei der auf beliebige Elemente zugegriffen wird, dann ändere ich die ggf. verwendete LinkedList zu einer ArrayList. Das ist eine Form der Optimierung. Das ist schwer, abzugrenzen. Das könnte man bezeichnen als: Behebung eines Fehlers. Aber ein wirklicher Fehler war es ja nicht, denn die Tests liefen durch. Und ich habe auch keinen Test hinzugefügt, der fehl geschlagen ist und den ich dann mit der Änderung zum laufen gebracht habe ...

Die Regel, keine Optimierungen zu machen, ist somit relativ schwer abzugrenzen. Aber es ist eine wichtige Regel, die man immer im Hinterkopf haben sollte.

Und man sollte immer geeignete Datentypen verwenden. Wenn das bei einem Datum ein String sein soll: Sei es drum. Aber das ist hoffentlich gekapselt in einer Klasse a.la. StringBasedDate oder so. Aber mit einem Datum rechnet man in der Regel doch regelmäßig, daher ist die geeignete Form eben nicht String. Gerade in der Datenbank möchte ich doch einiges machen können. Ich limitiere die Möglichkeiten, die ich in einer Datenbank nutzen kann.

In den C#-Foren hieße es schnell, daß bei den Gigabytes an Speicher und Gigahertz an Geschwindigkeit, die ein Rechner heutzutage hat, es keine Rolle spielt welchen Datentyp man für ein Datum verwendet und wie rum das ganze schneller verarbeitet wird.
Gerade das wundert mich etwas, denn C# war ja Windows basiert und da war der SQL Server führend. Und der bietet ja - was Datum/Zeit angeht - extrem viel. Die Aussage ist natürlich jetzt nicht 1:1 kopiert und auch der Context fehlt, aber das kann durchaus schlicht der Punkt sein: "Keine Optimierungen".

Generell stimme ich dem zu, aber man sollte die zur Verfügung stehenden Dinge kennen und diese dann auch einsetzen. Also sich überlegen: Was will ich überhaupt haben und machen?
 

PierreDole

Mitglied
Ok, das ist eine Menge Lesestoff. "Don't Repeat Yourself" kannte ich schon. "Keep It Simple" kannte ich auch, kann es aber vorerst knicken, da ich nur für mich programmiere und nicht für Kunden. Heißt, ich kann alles mit mir selbst ausmachen und es endet immer im Versuch eine eierlengende Wollmilchsau zu programmieren. Mit der Anzahl der Projekte wird es aber immer weniger. ;)
Clean Code ist auf jeden Fall etwas, was mich anspricht. Werde mir das ganze nochmal in aller Ruhe durchlesen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
MiMa Date vs LocalDate/LocalDateTime Java Basics - Anfänger-Themen 13
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
M Umgang mit dem Type "Date" Java Basics - Anfänger-Themen 6
sserio Date Library Frage Java Basics - Anfänger-Themen 9
B Date - Vergleich (equals / after) ? Java Basics - Anfänger-Themen 3
G convert Date to LocalDate Java Basics - Anfänger-Themen 11
G convert Optional<Date> into Optional<LocalDate> Java Basics - Anfänger-Themen 6
J Methoden toString()-Date Formatter Java Basics - Anfänger-Themen 8
L Java Date Format ändern Java Basics - Anfänger-Themen 5
B java.util.Date noch zeitgemäß? Java Basics - Anfänger-Themen 6
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
B Date - Umwandlung OffsetDateTime Java Basics - Anfänger-Themen 11
B Date Konvertierung Java Basics - Anfänger-Themen 0
B Date formatieren Java Basics - Anfänger-Themen 13
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
Thallius Date für DatePicker formatieren aber wie? Java Basics - Anfänger-Themen 9
A Vererbungshierachie und java.util.Date Java Basics - Anfänger-Themen 31
agent47 Java 8 Locale Date Time Java Basics - Anfänger-Themen 2
S String zu Date Java Basics - Anfänger-Themen 6
L Java String to date? Java Basics - Anfänger-Themen 2
H Repräsentation von DateTime (Joda) in Java Util Date überführen Java Basics - Anfänger-Themen 3
I Date zu 01.01.<year> setzen Java Basics - Anfänger-Themen 1
H java date-time parser Java Basics - Anfänger-Themen 1
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
A String to Date parsing Java Basics - Anfänger-Themen 2
M TimeUnit ms nach date convertieren Java Basics - Anfänger-Themen 2
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
K Best Practice Date in einem Konstruktor angeben Java Basics - Anfänger-Themen 5
K Datum und Uhrzeit als Date Objekt Java Basics - Anfänger-Themen 10
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Change date Format Java Basics - Anfänger-Themen 2
P Date oder Kalender? Was soll man verwenden? Java Basics - Anfänger-Themen 2
M Simple Date Format Java Basics - Anfänger-Themen 2
S Erste Schritte Berechnung mit Daten aus CSV und Date Objekt Java Basics - Anfänger-Themen 2
D Java Date/Calendar Problem Java Basics - Anfänger-Themen 4
Kenan89 Java Date List Java Basics - Anfänger-Themen 4
L Date differenz Java Basics - Anfänger-Themen 6
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
B Datentypen Date Java Basics - Anfänger-Themen 11
K konvertiere Millisekunden in ein Utc Date Objekt Java Basics - Anfänger-Themen 5
G Date - Calender | "Vergleich" Java Basics - Anfänger-Themen 3
M Mal wieder Probleme mit Date Java Basics - Anfänger-Themen 9
A Datentypen Datum mit "May" zu Date parsen Java Basics - Anfänger-Themen 6
Blindxantos Datentypen Probleme bei util.Date zu sql.Date Java Basics - Anfänger-Themen 5
R Tage subtrahieren von einem Date() Java Basics - Anfänger-Themen 6
I Date um 1 Jahr erhöhen? Java Basics - Anfänger-Themen 17
F GMT für Date Objekte festlegen Java Basics - Anfänger-Themen 5
F Sekunden abschneiden bei Date Java Basics - Anfänger-Themen 4
L int TimeZone für Date Java Basics - Anfänger-Themen 3
N alter mit Date ausrechnen Java Basics - Anfänger-Themen 10
turmaline String zu Date konvertieren -> Unparseable date Java Basics - Anfänger-Themen 5
T java.util.Date Java Basics - Anfänger-Themen 5
C Date() ->das Datum von gestern ausgeben Java Basics - Anfänger-Themen 11
M Datentypen Wie initialisiere ich ein Objekt vom Typ Date? Java Basics - Anfänger-Themen 3
H OOP java.sql.Date does not have a no-arg default constructor Java Basics - Anfänger-Themen 2
L Date subtrahieren? Java Basics - Anfänger-Themen 10
G Date von heute mit Uhrzeit erzeugen Java Basics - Anfänger-Themen 9
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
I Null - Wert bei Date (Mysql) Java Basics - Anfänger-Themen 2
H Date-Objekt um einen Monat "erhöhen" Java Basics - Anfänger-Themen 7
A The method getYear() from the type Date is deprecated Java Basics - Anfänger-Themen 6
P Datum: String in Date umwandeln Java Basics - Anfänger-Themen 7
T mit Typen Date rechnen Java Basics - Anfänger-Themen 6
F java.sql.Date Differenz Java Basics - Anfänger-Themen 3
P Date geht auf UNIX 1 Stunde nach Java Basics - Anfänger-Themen 14
M Date-Problem Java Basics - Anfänger-Themen 3
H Einfaches Date-parse problem Java Basics - Anfänger-Themen 2
Developer_X Date Java Basics - Anfänger-Themen 4
Antoras Daten aus Date lesen Java Basics - Anfänger-Themen 3
G String in Date konvertieren Java Basics - Anfänger-Themen 6
W 2 Date()-Daten vergleichen Java Basics - Anfänger-Themen 6
W String in Date Java Basics - Anfänger-Themen 4
G SpinnerDateModel stard & end nur Date? Java Basics - Anfänger-Themen 4
H Date-Object "um eins erhöhen! Java Basics - Anfänger-Themen 4
G Anfänger: Problem mit Date Java Basics - Anfänger-Themen 3
S NullPointerException bei Date.setTime() Java Basics - Anfänger-Themen 3
M 2 Date()-Datum´s vergleichen Java Basics - Anfänger-Themen 9
C Java 7 Date Java Basics - Anfänger-Themen 9
L Timer und Date Java Basics - Anfänger-Themen 2
G SQL Date zu JAVA Date Java Basics - Anfänger-Themen 4
G String in Date casten. Java Basics - Anfänger-Themen 7
G String in Date casten Java Basics - Anfänger-Themen 4
G java.text.parseException: Unparseable Date Java Basics - Anfänger-Themen 7
U java.util.Date to java.sql.Date Java Basics - Anfänger-Themen 2
B JSpinner/Date auslesen Java Basics - Anfänger-Themen 3
S Datum umwandeln: String in Date umwandeln Java Basics - Anfänger-Themen 4
F date und time berechnungen Java Basics - Anfänger-Themen 2
G Formatieren von Date-Objekten Java Basics - Anfänger-Themen 5
J Date-Objekt formatiert als String ausgeben Java Basics - Anfänger-Themen 2
G Date Objekt für aktuelles Datum erzeugen Java Basics - Anfänger-Themen 9
G Objekte vom Typ Date vergleichen Java Basics - Anfänger-Themen 2
P JAVA in Exe Date ausführen Java Basics - Anfänger-Themen 7
B string 2 sql.date() Java Basics - Anfänger-Themen 8
G date in sekunden umwandeln und wieder zurück. Java Basics - Anfänger-Themen 6
A einlesen von date und boolean Java Basics - Anfänger-Themen 3
G String in java.sql.Date umwandeln Java Basics - Anfänger-Themen 4
W Java.mysql.date in GregorianCalender konvertieren Java Basics - Anfänger-Themen 2
W Aus Textfeld ein "MySQL Date" auslesen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben