Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis
Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 5 Raum und Zeit
Pfeil 5.1 Weltzeit *
Pfeil 5.2 Wichtige Datum-Klassen im Überblick
Pfeil 5.2.1 Der 1.1.1970
Pfeil 5.2.2 System.currentTimeMillis()
Pfeil 5.2.3 Einfache Zeitumrechnungen durch TimeUnit
Pfeil 5.3 Sprachen der Länder
Pfeil 5.3.1 Sprachen und Regionen über Locale-Objekte
Pfeil 5.4 Internationalisierung und Lokalisierung
Pfeil 5.4.1 ResourceBundle-Objekte und Ressource-Dateien
Pfeil 5.4.2 Ressource-Dateien zur Lokalisierung
Pfeil 5.4.3 Die Klasse ResourceBundle
Pfeil 5.4.4 Ladestrategie für ResourceBundle-Objekte
Pfeil 5.4.5 Ladeprozess und Format anpassen *
Pfeil 5.5 Die Klasse Date
Pfeil 5.5.1 Objekte erzeugen und Methoden nutzen
Pfeil 5.5.2 Date-Objekte sind nicht immutable
Pfeil 5.6 Calendar und GregorianCalendar
Pfeil 5.6.1 Die abstrakte Klasse Calendar
Pfeil 5.6.2 Calendar nach Date und Millisekunden fragen
Pfeil 5.6.3 Abfragen und Setzen von Datumselementen über Feldbezeichner
Pfeil 5.6.4 Kalender-Typen *
Pfeil 5.6.5 Kalender-Exemplare bauen über den Calendar.Builder
Pfeil 5.6.6 Wie viele Tage hat der Monat, oder wie viele Monate hat ein Jahr? *
Pfeil 5.6.7 Wann beginnt die Woche und wann die erste Woche im Jahr? *
Pfeil 5.6.8 Der gregorianische Kalender
Pfeil 5.7 Zeitzonen in Java *
Pfeil 5.7.1 Zeitzonen durch die Klasse TimeZone repräsentieren
Pfeil 5.7.2 SimpleTimeZone
Pfeil 5.7.3 Methoden von TimeZone
Pfeil 5.9 Formatieren und Parsen von Datumsangaben
Pfeil 5.9.1 Ausgaben mit printf(…)
Pfeil 5.9.2 Ausgaben mit Calendar-Methoden getDisplayName(…) *
Pfeil 5.9.3 Mit DateFormat und SimpleDateFormat formatieren
Pfeil 5.9.4 Parsen von Datumswerten
Pfeil 5.10 Date-Time-API in Java 8
Pfeil 5.10.1 Datumsklasse LocalDate
Pfeil 5.10.2 Ostertage *
Pfeil 5.10.3 Die Klasse YearMonth
Pfeil 5.10.4 Die Klasse MonthDay
Pfeil 5.10.5 Aufzählung DayOfWeek und Month
Pfeil 5.10.6 Klasse LocalTime
Pfeil 5.10.7 Klasse LocalDateTime
Pfeil 5.10.8 Klasse Year
Pfeil 5.10.9 Zeitzonen-Klassen ZoneId und ZoneOffset
Pfeil 5.10.10 Temporale Klassen mit Zeitzoneninformationen
Pfeil 5.10.11 Klassen Period und Duration
Pfeil 5.10.12 Klasse Instant
Pfeil 5.10.13 Parsen und Formatieren von Datumszeitwerten
Pfeil 5.10.14 Das Paket java.time.temporal *
Pfeil 5.10.15 Konvertierungen zwischen der klassischen API und Date-Time-API
Pfeil 5.11 Die Default-Falle
Pfeil 5.12 Zum Weiterlesen
 
Zum Seitenanfang

5.9Formatieren und Parsen von Datumsangaben Zur vorigen ÜberschriftZur nächsten Überschrift

Nachdem wir die Calendar-Exemplare dazu benutzt haben, Datumswerte zu verwalten, wollen wir nun untersuchen, wie Formatierungsklassen dazu landestypische Ausgaben erzeugen. Unsere eigenen Ausgaben haben wir ja schon gemacht, doch geht es noch besser, weil die Java-Bibliothek für viele Länder selbstständig die richtigen Ausgaben durchführt.

 
Zum Seitenanfang

5.9.1Ausgaben mit printf(…) Zur vorigen ÜberschriftZur nächsten Überschrift

Die format(…)- bzw. printf(…)-Methoden sind in Java sehr flexibel und können auch Datumswerte ausgeben. Das können sie allerdings nicht so gut wie Klassen rund um DateFormat, doch kann es ausreichen, wenn Datumswerte nicht lokalisiert behandelt werden müssen:

Listing 5.12com/tutego/insel/date/DateFormatWithPrintf.java, main()

Calendar cal = Calendar.getInstance();
System.out.printf( "%tR%n", cal ); // 06:17
System.out.printf( "%tT%n", cal ); // 06:17:05
System.out.printf( "%tD%n", cal ); // 03/12/14
System.out.printf( "%tF%n", cal ); // 2014-03-12
System.out.printf( Locale.CHINA, "%tD%n", cal ); // 03/12/14 (!)
System.out.printf( Locale.GERMANY, "%tD%n", cal ); // 03/12/14 (!)

Das Ergebnis ist zweistellig, daher nicht ganz Jahr-2000-fest.[ 65 ](Im November 1999 wurde ein Algorithmus zur Lösung des Jahr-2000-Problems patentiert, der einfach aussagt, dass zweistellige Jahreszahlen unter 30 zu 20XX und alle Jahreszahlen >30 zu 19XX zu ergänzen sind. Das Patent konnte allerdings erfolgreich angefochten werden.) Besonders beim letzten Beispiel ist abzulesen, dass die Locale-Angabe für Datumswerte generell nicht funktioniert (chinesische Datumsangaben beginnen mit dem Jahr). Die Abkürzungen %tR, %tT, %tD und %tF sind mit festen Reihenfolgen definiert, die die API-Dokumentation zeigt. So ist %tD nichts anderes als eine Abkürzung für %tm/%td/%ty. Die Zeitwerte können auch von den neuen Klassen der Date-Time-API stammen.

 
Zum Seitenanfang

5.9.2Ausgaben mit Calendar-Methoden getDisplayName(…) * Zur vorigen ÜberschriftZur nächsten Überschrift

Die Calendar-Klasse liefert mit getDisplayName(int field, int style, Locale locale) einen String für einen Feldwert zurück. Der style ist eine Konstante, und deklariert sind folgende Konstanten: SHORT_FORMAT (SHORT), SHORT_STANDALONE, LONG_FORMAT (LONG), LONG_STANDALONE, NARROW_FORMAT, NARROW_STANDALONE, einige neu seit Java 8. Eine weitere Methode getDisplayNames(int field, int style, Locale locale) liefert ein Map<String,Integer> mit allen String-Repräsentationen für ein Feld.

[zB]Beispiel

Calendar cal = Calendar.getInstance();
System.out.println( cal.getDisplayName( Calendar.MONTH, Calendar.LONG_FORMAT,
Locale.GERMANY ) ); // Februar
System.out.println( cal.getDisplayNames( Calendar.MONTH, Calendar.LONG_FORMAT,
Locale.GERMANY ) ); // {Oktober=9, Mai=4, …
 
Zum Seitenanfang

5.9.3Mit DateFormat und SimpleDateFormat formatieren Zur vorigen ÜberschriftZur nächsten Überschrift

Eine Klasse, die die Ausgabe und das Einlesen der Datum-Felder übernimmt, ist DateFormat. Da DateFormat abstrakt ist, ist erst eine implementierende Unterklasse einsatzbereit. Natürlich liegt eine solche Klasse auch vor: SimpleDateFormat. Die Klasse bietet reichhaltige Methoden zur Zerlegung von Datum-Zeichenketten sowie Methoden zur Ausgabe unter verschiedenen Sprachen und Formatierungen an.

[zB]Beispiel

Ausgabe des Datums ohne zusätzliche Formatierungsanweisungen mit der Klasse SimpleDateFormat und einmal mit der printf(…)-Methode:

Calendar cal = Calendar.getInstance();
Date time = cal.getTime();
DateFormat formatter = new SimpleDateFormat();
System.out.println( formatter.format( time ) ); // 12.03.16 18:11
System.out.printf( "%tT%n", cal ); // 18:11:11
System.out.printf( "%tT%n", time ); // 18:11:11
System.out.printf( "%tT%n", time.getTime() ); // 18:11:11

Formatiert printf(…) ein Datum, kann es als Calendar-, Date- oder Long-Objekt angegeben werden. Bei format(…) ist nur Date erlaubt; ist es ein Calendar, folgt eine »java.lang.IllegalArgumentException: Cannot format given Object as a Date«.

Um das Datum zu formatieren, müssen wir zunächst ein Exemplar von SimpleDateFormat erzeugen. Dieses bekommt dann eventuell Formatierungsanweisungen (über eine andere Methode oder über einen weiteren Konstruktor) und formatiert mit der format(…)-Methode das Datum.

Vererbungsbeziehungen von DateFormat und SimpleDateFormat

Abbildung 5.2Vererbungsbeziehungen von DateFormat und SimpleDateFormat

class java.text.SimpleDateFormat
extends DateFormat
  • SimpleDateFormat()
    Erzeugt ein neues SimpleDateFormat-Objekt in der voreingestellten Sprache.

abstract class java.text.DateFormat
extends Format
implements Cloneable
  • final String format(Date date)
    Formatiert das Datum date in einen Datum-/Zeit-String. Ein Calendar-Objekt ist bisher nicht erlaubt. Wer es dennoch versucht, wird eine »java.lang.IllegalArgumentException: Cannot format given Object as a Date« ernten. Zur Erinnerung: cal.getTime() liefert vom Calendar-Objekt cal ein passendes Date-Objekt.

Vorgefertigte Formatierungen

Wir haben im vorigen Beispiel gesehen, dass das Ausgabeformat auf Monat, Tag, Jahr, Leerzeichen, Stunde, Minute festgelegt ist. Nun bietet die DateFormat-Klasse drei statische Fabrikmethoden für vorgefertigte Formatierungen:

  • DateFormat getDateInstance(): Formatierung nur für Datum

  • DateFormat getTimeInstance(): Formatierung nur für Zeit

  • DateFormat getDateTimeInstance(): Formatierung für Datum und Zeit

Optional lassen sich den Methoden Argumente für Präzisionen mitgeben, und zwar DateFormat.SHORT, DateFormat.MEDIUM, DateFormat.LONG oder DateFormat.FULL. Diese ermöglichen es, dass sich die Zeit bzw. das Datum auf vier Arten formatieren lässt:

Konstante

Beispiel für Datum

Beispiel für Zeit

DateFormat.SHORT

24.12.16

21:54

DateFormat.MEDIUM

24.12.2016

21:54:46

DateFormat.LONG

24. Dezember 2016

21:54:20 GMT+02:00

DateFormat.FULL

Samstag, 24. Dezember 2016

21.54 Uhr GMT+02:00

Tabelle 5.3Konstanten aus DateFormat und ihre Wirkung

Den statischen Methoden lässt sich weiterhin ein Locale-Objekt übergeben, sodass sie für eine bestimmte Landessprache formatieren:

Listing 5.13com/tutego/insel/date/DateTimeInstance.java, main()

Date d = new Date();

DateFormat df = DateFormat.getDateTimeInstance(
/* dateStyle = */ DateFormat.FULL,
/* timeStyle = */ DateFormat.MEDIUM );
out.println( df.format(d) ); // Mittwoch, 12. März 2014 16:01:11

df = DateFormat.getDateTimeInstance( DateFormat.FULL,
DateFormat.MEDIUM,
Locale.ITALY );
out.println( df.format(d) ); // mercoledì 12 marzo 2014 16.01.11

df = DateFormat.getDateTimeInstance( DateFormat.SHORT,
DateFormat.FULL,
Locale.CANADA_FRENCH );
out.println( df.format(d) ); // 14-03-12 16 h 01 CET

Die statischen Methoden, die das vordefinierte DateFormat erzeugen, sind:

abstract class java.text.DateFormat
extends Format
implements Cloneable
  • static final DateFormat getDateInstance()

  • static final DateFormat getTimeInstance()

  • static final DateFormat getDateTimeInstance()
    Liefert einen Datum-/Zeit-Formatierer mit dem vorgegebenen Stil aus der Standardumgebung.

  • static final DateFormat getDateInstance(int dateStyle)

  • static final DateFormat getTimeInstance(int style)
    Liefert einen Datum-/Zeit-Formatierer mit dem Stil style und der Standardsprache.

  • static final DateFormat getDateInstance(int style, Locale aLocale)

  • static final DateFormat getTimeInstance(int style, Locale aLocale)
    Liefert einen Datum-/Zeit-Formatierer mit dem Stil style und der Sprache aLocale.

  • static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
    Gibt einen Datum-/Zeit-Formatierer für die gesetzte Sprache im angegebenen Formatierungsstil zurück.

  • static final DateFormat getDateTimeInstance(int dateStyle, inttimeStyle, LocaleaLocale)
    Gibt einen Datum-/Zeit-Formatierer für die Sprache aLocale im angegebenen Formatierungsstil zurück.

Eine noch individuellere Ausgabe *

Um das Ausgabeformat zu individualisieren, kann ein Formatierungs-String die Ausgabe anpassen. Diese Formatierungsanweisung, in der alle ASCII-Zeichen eine bestimmte Bedeutung haben, wird entweder dem Konstruktor der Klasse SimpleDateFormat übergeben oder kann mit der applyPattern(String)-Methode geändert werden:

Listing 5.14com/tutego/insel/date/SimpleDateFormatPattern.java, main()

DateFormat dfmt = new SimpleDateFormat( "E.', den' dd.MM.yy 'um' hh:mm:ss" );
System.out.println( dfmt.format(new Date()) ); // Mi., den 21.03.07 um 09:14:20

SimpleDateFormat sdfmt = new SimpleDateFormat();
sdfmt.applyPattern( "EEEE', 'dd. MMMM yyyy hh:mm" );
System.out.println( sdfmt.format(new Date()) ); // Mittwoch, 21. März 2007 09:14

Tabelle 5.3 zeigt die erlaubten Symbole mit ihren Sonderbedeutungen. Mehrfach wiederholte Zeichen werden, wenn möglich, durch die Langform der jeweiligen Angabe ersetzt. Diese Symbole sind sprachunabhängig.

Symbol

Bedeutung

Präsentation

Beispiel

G

Ära

Text

AD

yy

Jahr, zweistellig

Nummer

07

yyyy

Jahr, vierstellig

Nummer

2007

M

Monat im Jahr

Nummer

7

MM

Monat im Jahr mit 0

Nummer

07

MMM

Monat im Jahr, kurz

Text

Sep

MMMM

Monat im Jahr, lang

Text

September

d

Tag im Monat

Nummer

26

h

Stunde (1–12)

Nummer

9

H

Stunde am Tag (0–23)

Nummer

0

m

Minute der Stunde

Nummer

13

s

Sekunde der Minute

Nummer

22

S

Millisekunde

Nummer

257

E

Tag der Woche, kurz

Text

Mi

EEEE

Tag der Woche, lang

Text

Mittwoch

D

Tag im Jahr

Nummer

304

F

Tag der Woche im Monat

Nummer

3

w

Woche im Jahr

Nummer

12

W

Woche im Monat

Nummer

3

a

am- und pm-Text

Text

AM

k

Stunde am Tag (1–24)

Nummer

24

K

Stunde (0–11)

Nummer

0

z

allgemeine Zeitzone

Text

GMT+02:00

Z

Zeitzone nach RFC 822

Text

+0200

'

Zeichen für unbehandelten Text

Trennzeichen

Hallo Welt

''

einzelnes Hochkomma

Literal

'

Tabelle 5.4Symbole im Formatierungs-String zur Steuerung der Ausgabe bei SimpleDateFormat

Formatierungs-String

Ergebnis

yyyy.MM.dd G 'um' hh:mm:ss z

2004.07.23 n. Chr. um 09:15:53 CEST

EEE, MMM d, ''yy

Fr, Jul 23, '04

H:mm a

9:16 AM

hh 'o''clock' a, zzzz

09 o'clock AM, zentraleuropäische Sommerzeit

K:mm a, z

9:17 AM, CEST

yyyy. MMMMM. dd GGG hh:mm aaa

2004. Juli. 23 n. Chr. 09:18 AM

Tabelle 5.5Beispiele für Symbole bei SimpleDateFormat

class java.text.SimpleDateFormat
extends DateFormat
  • SimpleDateFormat()
    Erzeugt ein neues SimpleDateFormat-Objekt in der eingestellten Sprache.

  • SimpleDateFormat(String pattern)
    Erzeugt ein SimpleDateFormat-Objekt mit dem vorgegebenen Formatierungs-String in der voreingestellten Sprache.

  • SimpleDateFormat(String pattern, Locale locale)
    Erzeugt ein SimpleDateFormat-Objekt mit dem vorgegebenen Formatierungs-String in der Sprache locale.

  • SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
    Erzeugt ein SimpleDateFormat-Objekt mit dem vorgegebenen Formatierungs-String und einem Objekt formatSymbols, das die formatierungstypischen Informationen sammelt.

  • void applyPattern(String pattern)
    Setzt den Formatierungs-String.

  • String toPattern()
    Liefert den aktuell eingestellten Formatierungs-String.

  • String toLocalizedPattern()
    Liefert einen übersetzten Formatierungs-String. Substituiert einige Formatierungssymbole.

 
Zum Seitenanfang

5.9.4Parsen von Datumswerten Zur vorigen ÜberschriftZur nächsten Überschrift

Mit der Klasse DateFormat zerlegt parse(String) Strings, die ein Datum darstellen. Die Methode liefert ein Date-Objekt zurück und kann so zum Beispiel den Zeit-String »Wed Jul 11 09:35:27 CEST 2012« parsen und ein Datumsobjekt liefern, was new Date(1341992127435) gleichkommt. Da parse(…) allzu leicht schiefgehen kann, muss der Aufruf entweder in einen try-Block gesetzt werden, oder der Fehler muss anderweitig weitergeleitet werden.

[zB]Beispiel

Parse eine einfache Datumsrepräsentation. Erzeuge dann vom Datumsobjekt eine String-Repräsentation, und parse diese wieder:

Listing 5.15com/tutego/insel/date/FormatAndParseDate.java, main()

try {
DateFormat formatter = DateFormat.getDateTimeInstance();
Date d = formatter.parse( "24.12.2007 16:59:12" );
System.out.println( d ); // Mon Dec 24 16:59:12 CET 2007
String s = formatter.format( new Date() );
System.out.println( formatter.parse(s) ); // Wed Jul 11 09:34:40 CEST 2012
}
catch ( ParseException e ) { e.printStackTrace(); }

Die Methode parse() ist sehr empfindlich, wenn einige Felder nicht angegeben werden. Nach der Dokumentation sollte zwar ein Fehlen der Stunden nichts ausmachen, aber leider ist uns dann doch immer eine ParseException sicher, auch wenn nur die Sekunden fehlen. Wegen dieser Unzulänglichkeiten ist die Klasse SimpleDateFormat sehr komplex und nicht leicht zu durchschauen.

[zB]Beispiel

Parse ein Datum, das das Format »Tag-Monat-Jahr« hat, wobei das Jahr vierstellig sein soll und der Monat zweistellig:

DateFormat formatter = new SimpleDateFormat( "dd-MM-yyyy " );
Date date = formatter.parse( "12-03-2008" );

Jetzt haben wir ein Datum in ein Date-Objekt umgewandelt. Es taucht aber wieder das Problem auf, dass Date an kein spezielles Land und an keine Zeitzone angepasst ist, sondern die GMT in Englisch repräsentiert.

abstract class java.text.DateFormat
extends Format
implements Cloneable, Serializable
  • Date parse(String source) throws ParseException
    Zerlegt einen Datums- oder einen Zeit-String.

parse(…) – die Nachsichtige

Die Methode parse(…) beschwert sich standardmäßig nicht über unsinnige Werte. Um für eine Ausnahme zu sorgen, bietet DateFormat eine Methode setLenient(boolean), die den »Mildmodus« mit setLenient(false) ausschaltet. Das zeigen die folgenden Zeilen:

Listing 5.16com/tutego/insel/date/ParseLenient.java, main()

try {
DateFormat formatter1 = new SimpleDateFormat( "dd-MM-yyyy" );
System.out.printf( "%tF%n", formatter1.parse( "29-02-2008" ) ); // 2008-02-29
System.out.printf( "%tF%n", formatter1.parse( "29-02-2007" ) ); // 2007-03-01
System.out.printf( "%tF%n", formatter1.parse( "33-02-2008" ) ); // 2008-03-04

formatter1.setLenient( false );
System.out.println( formatter1.parse( "29-02-2007" ) ); //
}
catch ( ParseException e ) {
e.printStackTrace();
}

Am zweiten und dritten Beispiel lässt sich ablesen, dass das Datum auf den nächsten Monat »rollt«. Mit setLenient(false) gibt es für den 29.02.2007 eine ParseException:

2008-02-29
2007-03-01
2008-03-04
java.text.ParseException: Unparseable date: "29-02-2007"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.tutego.insel.date.ParseLenient.main(ParseLenient.java:17)

Der 29.02.2008 ist in Ordnung, weil 2008 ein Schaltjahr war.

[»]Hinweis

Die Objektmethode isLeapYear(int year) testet, ob year ein Schaltjahr repräsentiert. Auf den ersten Blick ist es schon seltsam, dass die Methode nicht statisch ist.

Parsen und Formatieren ab bestimmten Positionen *

Von den Methoden format(…) und parse(…) gibt es zwei Varianten, mit denen Teile eines Strings ausgegeben oder formatiert werden können. Zur Kapselung der Position dient ein neues Objekt, ParsePosition. Diese Klasse nutzt format(…) intern, um beim Parse-Prozess die aktuelle Position zu verwalten.

abstract class java.text.DateFormat
extends Format
implements Cloneable, Serializable
  • abstract Date parse(String source, ParsePosition pos) throws ParseException
    Zerlegt einen Datums- oder einen Zeit-String und beginnt beim Parsen ab einer vorgegebenen Position.

 


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 SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018
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.

 
Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern