Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.

Ähnliche Präsentationen


Präsentation zum Thema: "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."—  Präsentation transkript:

1 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz Termin 7 (Datum, Internationalisierung, Format)

2 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 In der Java Klassenbibliothek existieren mehrere Klassen, sich zur Repräsentation eines Datums, bzw. von Zeitpunkten eignen. Grundsätzlich ist jeder Zeitpunkt in Millisekunden seit dem repräsentiert (vgl. System.currentTimeMillis(), Datentyp long) Zeit und Datumsarithmetik ist rel. komplex. z.B. Schaltjahre, Schaltsekunden(61), Zeitzonen, verschiedene Kalender (Julianisch bis 4.Okt.1582) über die Zeit und in verschiedenen Ländern (hebräischer Kal. 13 Monate), DST Thu Nov 22 01:43:17 GMT+01: = (long) Datum Allgemeines

3 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Datum Klassen Date Kapselt im wesentlichen einen long-Wert, der einen Zeitpunkt repräsentiert. Früher wurde sie auch zur Konvertierung in Tage. Monate,... verwendet Calendar Abstrakte Oberklasse für Kalender, die zwischen dem long-Wert und Werten für Tag/Monat/Jahr, Stunden/Minuten/Sekunden konvertiert. zB. 28 Feb + 1 Tag = ? GregorianCalendar Einzige konkrete Unterklasse von Calender in der Klassenbibliothek. Realisiert einen Kalender, wie er in den meisten westlichen Ländern verwendet wird alle Klassen befinden sich in java.util

4 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 Die Klasse Date Allgemeines Ein Objekt der Klasse Date repräsentiert ein Datum (bzw. einen Zeitpunkt) als long-Wert (Genauigkeit: 1 Millisekunde) Vor jdk 1.1 wurde es zur Konvertierung zwischen dem long- Wert und den jew. Jahr/Monat/Tag/Stunden/... verwendet Die Konvertierungsmethoden sind mittlerweile als "deprecated" gekennzeichnet (abgeschafft) Der long-Wert ist unabhängig von der jew. Zeitzone zu interpretieren (0 = :00:000 Uhr GMT+00:00 = Thu Jan 01 01:00:00 GMT+01: ) Date implementiert das Interface Comparable

5 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Die Klasse Date Methoden //construction Date() // current date/time Date(long date) // given date/time in ms since Date(int year, month,...) // deprecated -> use Calendar Date(String date)// deprecated -> use DateFormat // methods after(Date when) before(Date when) compareTo(Object o) // if o is a date -> compares, otherwise // ClassCastException toString()// dow mon dd hh:mm:ss zzz yyyy // default timezone

6 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 Die abstrakte Klasse Calendar Allgemeines Die Calendar-Klasse ist die gemeinsame Oberklasse aller Kalender (dzt. nur GregorianCalendar) Sie kapselt ein Date-Objekt, enthält zahlreiche Feldern, wie Jahr/Monat/Tag/Stunden/... und definiert Funktionen zur Konvertierung Konvertierung erfolgt in Abhängigkeit einer Zeitzone (der des Systems, falls nichts anderes bestimmt) zB. 28. Feb Tag = ??

7 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 Die abstrakte Klasse Calendar Methoden //static methods getInstance() // static!, creates an object of a subclass //,depending on default timezone, locale getInstance(TimeZone z)... // methods set(int field, int value)// sets a field (e.g. MONTH) get(int field):int// gets the value of a field add(int field, int amount)// adds to a field; larger fields // may change eg DAY roll(int field, int amount) // adds, larger fields don´t change getActualMaximum(int field)// max, given the current date getActualMinimum(int field) // min getTime():Date// gets a Date (milliseconds!) setTime(Date d)// sets the internal Date

8 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8 Die abstrakte Klasse Calendar Konstanten (bzw. Felder zur Konvertierung) //static constants, field names ERAERA// 0-1, BC (before Christ), AD (anno domini) YEAR// MONTH // Month – DAY_OF_MONTH// HOUR// HOUR_OF_DAY// MINUTE// SECOND// MILLISECOND// AM_PM// 0..1 WEEK_OF_YEAR// WEEK_OF_MONTH // 0..6 DAY_OF_YEAR// DAY_OF_WEEK // see documentation

9 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9 Die Klasse GregorianCalendar Allgemeines Einzige Unterklasse von Calendar in der Bibliothek Realisiert den z.B. in Ö üblichen gregorianischen Kalender' Implementiert sogar den Kalenderwechsel am 4. Okt (Julianischer Kalender -> Gregorianischer) Objekte dieser Klasse erhält man mit Calendar.getInstance() in den meisten westlichen Ländern Details sind rel. kompliziert. Siehe Referenz-Dokumentation des JDK. Feiertage werden nicht verwaltet !

10 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10 Kalender Beispiel //22. Nov Calendar cal = Calendar.getInstance(); //now, defaults used System.out.println(cal.get(Calendar.DAY_OF_YEAR)); // 326 System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 5 System.out.println(cal.get(Calendar.DAY_OF_MONTH));// 22 System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); // 30 cal.add(Calendar.MONTH, 1); System.out.println(cal.get(Calendar.DAY_OF_YEAR)); // 356 System.out.println(cal.get(Calendar.DAY_OF_WEEK)); // 7 System.out.println(cal.get(Calendar.DAY_OF_MONTH));// 22 System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH)); // 31 //difficult without a calendar object!

11 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11 Internationalisierung Einleitung Internationalisierung ist der Prozeß, ein Programm so zu gestalten, daß es international lauffähig ist, also in mehreren Ländern korrekt läuft Bereits bisher sind wir einige Male auf Probleme gestoßen, die mit Internationalisierung zusammenhängen: Readers, Character Encodings (z.B. Umlaute,...) Unicode Calendar, TimeZone Besonders wichtig ist, daß international lauffähige Programme z.B. Meldungen in Landessprache ausgeben (!!) und das Datums/Währungsformat berücksichtigen

12 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12 Internationalisierung Allgemeines Dasselbe Programms soll also, je nachdem in welchem Land es gestartet wird, die länderspezifischen Gegebenheiten berücksichtigen. Dazu gibt es eine Reihe von Klassen in der Klassenbibliothek, die dies unterstützen. Grundsätzlich muß das Programm zunächst wissen, in welchem Land es gerade läuft. Dies wird aus dem Betriebssystem ausgelesen. Nicht jedes Programm wird so geschrieben, daß es international lauffähig ist.

13 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13 Internationalisierung Relevante Klassen java.util.Locale Repräsentiert ein Gebietsschema (Land) (zB. de_AT, en_US, fr_FR,...) Locale.getDefault() java.util.TimeZone java.text – Package Formatierung von Zahlen-, Datums-, Zeitwerten,... Länderspezifischer Vergleich von Zeichenketten (zB. ch in Spanien),... NumberFormat DateFormat MessageFormat Collator (Zeichenkettenvergleich) java.util.ResourceBundle Ausgabe von länderspezifischem Text (zb Deutsch, English) und weitere (Readers/Writers, Calendar,...)

14 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14 Internationalisierung Beispiel Locale String formattedDate; DateFormat df = DateFormat.getDateTimeInstance(); Date d = new Date(); Locale loc = Locale.getDefault(); formattedDate = df.format(d); System.out.println("Locale: " + loc + " FormattedDate: " + formattedDate); // set Japan as JVM-wide Default Locale.setDefault(Locale.JAPAN); loc = Locale.getDefault(); df = DateFormat.getDateTimeInstance(); formattedDate = df.format(d); System.out.println("Locale: " + loc + " FormattedDate: " + formattedDate); // output: // Locale: de_AT FormattedDate: :07:11 // Locale: ja_JP FormattedDate: 2001/11/22 23:07:11 // TimeZone was not changed !

15 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15 Internationalisierung Beispiel Timezone String formattedDate; DateFormat f = DateFormat.getDateTimeInstance(); Date d = new Date(); TimeZone zone = TimeZone.getDefault(); formattedDate = f.format(d); System.err.println("Zone: " + zone.getID() + " FormattedDate: " + formattedDate); TimeZone.setDefault(TimeZone.getTimeZone(TimeZone.getAvailableIDs()[0])); zone = TimeZone.getDefault(); f = DateFormat.getDateTimeInstance(); formattedDate = f.format(d); System.err.println("Zone: " + zone.getID() + " FormattedDate: " + formattedDate); // output: // Zone: Europe/Berlin FormattedDate: :14:12 // Zone: Pacific/Niue FormattedDate: :14:12

16 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16 Die Klasse Locale Übersicht Objekte dieser Klasse repräsentieren eine geographische, politische oder kulturelle Region Locale-Objekte können keine besonderen Operationen ausführen. Sie identifizieren lediglich eine Region. Klassen, die länderspezifische Formatierungen oder Ausgaben erzeugen, nutzen diese Identifizierung. Java verwendet eine Default-Locale, die vom Gebietsschema des Betriebssystems abgeleitet wird. Diese wird auch von anderen Klassen zur Formatierung herangezogen. Man kann jedoch wie in vorigem Beispiel ersichtlich ein anderes Locale-Objekt als Default setzen Die Klasse Locale definiert eine Reihe von Konstanten zB Locale.SPAIN

17 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 17 Die Klasse TimeZone Übersicht Objekte dieser Klasse repräsentieren eine Zeitzone. Diese enthält nicht nur den Offset, sondern spezifiziert auch Anfang und Ende der DST (Sommerzeit) Die Klasse DateFormat, der Kalender,... nutzen diese Identifizierung. Java verwendet eine Default-TimeZone, die vom Gebietsschema des Betriebssystems abgeleitet wird. Man kann jedoch wie in vorigem Beispiel ersichtlich ein anderes TimeZone-Objekt als Default setzen

18 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 18 java.text Übersicht Dieses package enthält zahlreiche Klassen zur Formattierung von Zahlen und Datumswerten zum Vergleich von Zeichenketten (länderspezifisch zB ch – Spanien) und weitere Die Formattierung erfolgt länderspezifisch. Welche Regionen von einer Klasse unterstützt werden kann durch Aufruf von getAvailableLocales():Locale[] erfragt werden

19 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 19 java.text Hierarchie von relevanten Klassen Format NumberFormatDateFormat DecimalFormatSimpleDateFormat Collator

20 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 20 DateFormat Methoden // Creation of subclass Objects via DateFormat getDateInstance():DateFormat// default locale, default style getTimeInstance():DateFormat getDateTimeInstance():DateFormat getXXXInstance(int style, Locale l) // Constants for Style // SHORT, MEDIUM, LONG... format(Date):String// Formatting parse(String):Date// Parsing (style !!)... getAvailableLocales(): Locale[] // if You need more control over parsing and formatting use // the SimpleDateFormat class

21 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 21 NumberFormat Methoden // Creation of subclass Objects via NumberFormat getInstance():NumberFormat// default locale, default style getCurrencyInstance():NumberFormat getDateTimeInstance():NumberFormat getNumberInstance():NumberFormat getPercentageInstance():NumberFormat getXXXInstance(Locale l) // for a given locale... format(long):String// Formatting format(double):String// Formatting parse(String):Number// Parsing (style !!) setParseIntegerOnly(boolean) // only Integers getAvailableLocales():Locale[] // if You need more control over parsing and formatting use // the subclass DecimalFormat (pattern)

22 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 22 Collator Methoden // Creation of subclass Objects via NumberFormat getInstance():Collator // default locale, default style getInstance(Locale l):Collator // for a given locale... compare(String source, String target):int compare(Object o1, Object o2):int // Collator implements Comparator ! // -> you can and should use it for sorting

23 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 23 Zusammenfassung Klassen zur Internationalisierung java.util.Locale Repräsentiert ein Gebietsschema (Land) (zB. de_AT, en_US, fr_FR,...) Locale.getDefault() java.util.TimeZone java.text – Package Formatierung von Zahlen-, Datums-, Zeitwerten,... Länderspezifischer Vergleich von Zeichenketten (zB. ch in Spanien),... NumberFormat DateFormat MessageFormat Collator (Zeichenkettenvergleich) java.util.ResourceBundle Ausgabe von länderspezifischem Text (zb Deutsch, English)

24 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 24 Zusammenfassung Hinweise zur Übung


Herunterladen ppt "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold."

Ähnliche Präsentationen


Google-Anzeigen