Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien zum Buch
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichen und Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Schnittstellen, Aufzählungen, versiegelte Klassen, Records
9 Ausnahmen müssen sein
10 Geschachtelte Typen
11 Besondere Typen der Java SE
12 Generics<T>
13 Lambda-Ausdrücke und funktionale Programmierung
14 Architektur, Design und angewandte Objektorientierung
15 Java Platform Module System
16 Die Klassenbibliothek
17 Einführung in die nebenläufige Programmierung
18 Einführung in Datenstrukturen und Algorithmen
19 Einführung in grafische Oberflächen
20 Einführung in Dateien und Datenströme
21 Einführung ins Datenbankmanagement mit JDBC
22 Bits und Bytes, Mathematisches und Geld
23 Testen mit JUnit
24 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil 16 Die Klassenbibliothek
Pfeil 16.1 Die Java-Klassenphilosophie
Pfeil 16.1.1 Modul, Paket, Typ
Pfeil 16.1.2 Übersicht über die Pakete der Standardbibliothek
Pfeil 16.2 Einfache Zeitmessung und Profiling *
Pfeil 16.3 Die Klasse Class
Pfeil 16.3.1 An ein Class-Objekt kommen
Pfeil 16.3.2 Eine Class ist ein Type
Pfeil 16.4 Klassenlader
Pfeil 16.4.1 Die Klasse java.lang.ClassLoader
Pfeil 16.5 Die Utility-Klassen System und Properties
Pfeil 16.5.1 Speicher der JVM
Pfeil 16.5.2 Anzahl der CPUs bzw. Kerne
Pfeil 16.5.3 Systemeigenschaften der Java-Umgebung
Pfeil 16.5.4 Eigene Properties von der Konsole aus setzen *
Pfeil 16.5.5 Zeilenumbruchzeichen, line.separator
Pfeil 16.5.6 Umgebungsvariablen des Betriebssystems
Pfeil 16.6 Sprachen der Länder
Pfeil 16.6.1 Sprachen in Regionen über Locale-Objekte
Pfeil 16.7 Wichtige Datum-Klassen im Überblick
Pfeil 16.7.1 Der 1.1.1970
Pfeil 16.7.2 System.currentTimeMillis()
Pfeil 16.7.3 Einfache Zeitumrechnungen durch TimeUnit
Pfeil 16.8 Date-Time-API
Pfeil 16.8.1 Menschenzeit und Maschinenzeit
Pfeil 16.8.2 Die Datumsklasse LocalDate
Pfeil 16.9 Logging mit Java
Pfeil 16.9.1 Logging-APIs
Pfeil 16.9.2 Logging mit java.util.logging
Pfeil 16.10 Maven: Build-Management und Abhängigkeiten auflösen
Pfeil 16.10.1 Beispielprojekt in Eclipse mit Maven
Pfeil 16.10.2 Properties hinzunehmen
Pfeil 16.10.3 Dependency hinzunehmen
Pfeil 16.10.4 Lokales und das Remote-Repository
Pfeil 16.10.5 Lebenszylus, Phasen und Maven-Plugins
Pfeil 16.10.6 Archetypes
Pfeil 16.11 Zum Weiterlesen
 

Zum Seitenanfang

16.7    Wichtige Datum-Klassen im Überblick Zur vorigen ÜberschriftZur nächsten Überschrift

Weil Datumsberechnungen verschlungene Gebilde sind, können wir den Entwicklern von Java dankbar sein, dass sie uns viele Klassen zur Datumsberechnung und -formatierung zur Verfügung stellen. Die Entwickler haben die Klassen so abstrakt gehalten, dass lokale Besonderheiten wie Ausgabeformatierung, Parsen, Zeitzonen oder Sommer- und Winterzeit in verschiedenen Kalendern möglich sind.

Bis zur Java-Version 1.1 stand zur Darstellung und Manipulation von Datumswerten ausschließlich die Klasse java.util.Date zur Verfügung. Diese hatte mehrere Aufgaben:

  • Erzeugung eines Datum/Zeit-Objekts aus Jahr, Monat, Tag, Minute und Sekunde

  • Abfrage von Tag, Monat, Jahr … mit der Genauigkeit von Millisekunden

  • Ausgabe und Verarbeitung von Datum-Zeichenketten

Da die Date-Klasse nicht ganz fehlerfrei und internationalisiert war, wurden im JDK 1.1 neue Klassen eingeführt:

  • Calendar nimmt sich der Aufgabe von Date an, zwischen verschiedenen Datumsrepräsentationen und Zeitskalen zu konvertieren. Die Unterklasse GregorianCalendar wird direkt erzeugt.

  • DateFormat zerlegt Datum-Zeichenketten und formatiert die Ausgabe. Auch Datumsformate sind vom Land abhängig, das Java durch Locale-Objekte darstellt, und von einer Zeitzone, die durch die Exemplare der Klasse TimeZone repräsentiert ist.

In Java 8 zog eine weitere Datumsbibliothek mit ganz neuen Typen ein. Endlich können auch Datum und Zeit getrennt repräsentiert werden:

  • LocalDate, LocalTime, LocalDateTime sind die temporalen Klassen für ein Datum, für eine Zeit und für eine Kombination aus Datum und Zeit.

  • Period und Duration stehen für Abstände.

 

Zum Seitenanfang

16.7.1    Der 1.1.1970 Zur vorigen ÜberschriftZur nächsten Überschrift

Der 1.1.1970 war ein Donnerstag mit wegweisenden Änderungen: Die Briten freuten sich, dass die Volljährigkeit von 24 Jahren auf 18 Jahre fiel, und wie in jedem Jahr wurde das Beschneidungsfest gefeiert. Für uns ist aber eine technische Neuerung von Belang: Der 1.1.1970, 0:00:00 UTC heißt auch Unix-Epoche, und eine Unixzeit wird relativ zu diesem Zeitpunkt in Sekunden beschrieben. So kommen wir 100.000.000 Sekunden nach dem 1.1.1970 beim 3. März 1973 um 09:46:40 aus. Das Unix Billennium wurde bei 1.000.000.000 Sekunden nach dem 1.1.1970 gefeiert und repräsentiert den 9. September 2001, 01:46:40.

 

Zum Seitenanfang

16.7.2    System.currentTimeMillis() Zur vorigen ÜberschriftZur nächsten Überschrift

Auch für uns Java-Entwickler ist die Unixzeit von Bedeutung, denn viele Zeiten in Java sind relativ zu diesem Datum. Der Zeitstempel 0 bezieht sich auf den 1.1.1970 0:00:00 Uhr Greenwich-Zeit – das entspricht 1 Uhr nachts deutscher Zeit. Die Methode System.currentTimeMillis() liefert die vergangenen Millisekunden – nicht Sekunden! – relativ zum 1.1.1970, 00:00 Uhr UTC, wobei allerdings die Uhr des Betriebssystems nicht so genau gehen muss. Die Anzahl der Millisekunden wird in einem long repräsentiert, also in 64 Bit. Das reicht für etwa 300 Millionen Jahre.

[ ! ]  Warnung

Die Werte von currentTimeMillis() sind nicht zwingend aufsteigend, da sich Java die Zeit vom Betriebssystem holt, und da kann sich die Systemzeit ändern. Der Benutzer kann die Zeit anpassen, oder ein Dienst wie das Network Time Protocol (NTP) übernimmt diese Aufgabe. Differenzen von currentTimeMillis()-Zeitstempeln sind dann komplett falsch und könnten sogar negativ sein. Eine Alternative ist nanoTime(), das keinen Bezugspunkt hat, genauer und immer aufsteigend ist.[ 243 ](Die Seite http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime geht auf Details ein und verlinkt auf interne Implementierungen. )

 

Zum Seitenanfang

16.7.3    Einfache Zeitumrechnungen durch TimeUnit Zur vorigen ÜberschriftZur nächsten Überschrift

Eine Zeitdauer wird in Java oft durch Millisekunden ausgedrückt. 1.000 Millisekunden entsprechen 1 Sekunde, 1.000 × 60 Millisekunden 1 Minute usw. Diese ganzen großen Zahlen sind jedoch nicht besonders anschaulich, sodass zur Umrechnung TimeUnit-Objekte mit ihren to*(…)-Methoden genutzt werden. Java deklariert folgende Konstanten in TimeUnit: NANOSECONDS, MICROSECONDS, MILLISECONDS, DAYS, HOURS, SECONDS, MINUTES.

Jedes der Aufzählungselemente definiert die Umrechnungsmethoden toDays(…), toHours(…), toMicros(…), toMillis(…), toMinutes(…), toNanos(…), toSeconds(…); sie bekommen ein long und liefern ein long in der entsprechenden Einheit. Zudem gibt es zwei convert(…)-Methoden, die von einer Einheit in eine andere umrechnen.

[»]  Beispiel

Konvertiere 23.746.387 Millisekunden in Stunden:

int v = 23_746_387;

System.out.println( TimeUnit.MILLISECONDS.toHours( v ) ); // 6

System.out.println( TimeUnit.HOURS.convert( v, TimeUnit.MILLISECONDS ) ); // 6
enum java.util.concurrent.TimeUnit

extends Enum<TimeUnit>

implements Serializable, Comparable<TimeUnit>
  • NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS

    Aufzählungselemente von TimeUnit

  • long toDays(long duration)

  • long toHours(long duration)

  • long toMicros(long duration)

  • long toMillis(long duration)

  • long toMinutes(long duration)

  • long toNanos(long duration)

  • long toSeconds(long duration)

  • long convert(long sourceDuration, TimeUnit sourceUnit)

    Liefert sourceUnit.to*(sourceDuration), wobei * für die jeweilige Einheit steht. Beispielsweise liefert es HOURS.convert(sourceDuration, sourceUnit), dann sourceUnit.toHours(1). Die Lesbarkeit der Methode ist nicht optimal, daher sollten die anderen Methoden bevorzugt werden. Ergebnisse werden unter Umständen abgeschnitten, nicht gerundet. Gibt es einen Überlauf, folgt keine ArithmeticException.

  • long convert(Duration duration)

    Konvertiert die übergebene duration in die Zeiteinheit, die die aktuelle TimeUnit repräsentiert. So liefert TimeUnit.MINUTES.convert( Duration.ofHours(12) ) zum Beispiel 720. Damit sind etwa aunit.convert(Duration.ofNanos(n)) und aunit.convert(n, NANOSECONDS) gleich. Neu seit Java 11.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Spring Boot 3 und Spring Framework 6

Spring Boot 3 und Spring Framework 6




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2024

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern