10.3 Ausgabeformatierung 

Zur Formatierung einer Ausgabe stehen Ihnen zwei Möglichkeiten zur Verfügung:
- die statische Methode Format der Klasse String
- die Methode ToString der Schnittstelle IFormatable
10.3.1 Formatierung mit der Methode String.Format 

Die in Abschnitt 2.6.1, »Ausgabe mit Write und WriteLine«, gezeigten Formatierungen erreichen die Schreibroutinen, indem sie intern die Methode String.Format aufrufen. Daher sind die beiden folgenden Aufrufe völlig gleichwertig:
Console.WriteLine("{0:F}", DateTime.Now)
Console.WriteLine(String.Format("{0:F}", DateTime.Now))
Formatierungsvarianten
Die einfachste Variante der überladenen Format-Methode hat als ersten Parameter eine Zeichenkette, die die Formatierung beschreibt. Alle weiteren Parameter werden entsprechend den Formatangaben in geschweiften Klammern in den Formatstring eingefügt.
Public Shared Function Format(format As String, ParamArray args As Object()) |
Sie können auch festlegen, welche Sprache bzw. Kultur die Formatierung benutzt:
Public Shared Function Format(provider As IFormatProvider, _ |
Die Schnittstelle IFormatProvider. wird im .NET Framework von drei Klassen im Namensraum System.Globalization implementiert:
- CultureInfo: Schriftsystem und verwendeter Kalender
- DateTimeFormatInfo: Anzeige von Datum und Uhrzeit
- NumberFormatInfo: Darstellung numerischer Werte abhängig von der Kultur
Um beispielsweise das aktuelle Systemdatum in italienischer Sprache auszugeben, müssen Sie nur ein entsprechendes CultureInfo-Objekt bereitstellen:
Dim ci As New CultureInfo("it-IT")
Console.Write(String.Format(ci, "{0:D}", Now)) ' sabato 20 settembre 2003
Mit den Eigenschaften DateTimeFormat und NumberFormat der Klasse CultureInfo kann das Ausgabeformat der spezifischen Kultur abgefragt und neu festgelegt werden. Dazu veröffentlichen die beiden Klassen DateTimeFormatInfo und NumberFormatInfo eine größere Anzahl von Eigenschaften. Wie Sie das Dezimaltrennzeichen einer gegebenen Kultur abweichend vom Standard spezifisch festlegen können, zeigt das folgende Codefragment:
Dim d As Double = 12.25
Dim ci As New CultureInfo("de-DE")
Dim nfi As NumberFormatInfo = ci.NumberFormat
nfi.NumberDecimalSeparator = "*"
Console.WriteLine(String.Format(ci, "{0}", d))
Es wird zuerst ein CultureInfo-Objekt erzeugt, das mit de-DE die deutsche Kultur beschreibt. Über dessen Eigenschaft NumberFormat wird die dazu entsprechende Referenz auf NumberFormatInfo ermittelt. Mit der Eigenschaft NumberDecimalSeparator wird anschließend das Zeichen »*« als neues Dezimaltrennzeichen festgelegt.
Es kann sich als nützlich erweisen, ein kulturunabhängiges Format zur Verfügung zu stellen. Dieses erhalten Sie mit der statischen Eigenschaft InvariantCulture der Klasse CultureInfo. Das zurückgegebene CultureInfo-Objekt ist der englischen Sprache zugeordnet, ohne dabei landesspezifische Unterschiede zu berücksichtigen.
Standardformatzeichen von NumberFormatInfo
Tabelle 2.6, »Standardformate für die Ausgabe«, in Abschnitt 2.6.1, »Ausgabe mit Write und WriteLine«, zeigt bereits die Formatierungsmöglichkeiten. Tabelle 10.3 fasst die Formatangaben zusammen.
Formatangabe | Beschreibung |
C |
Lokales Währungsformat |
D |
Dezimaler Integer (nur ganze Zahlen) |
E |
Wissenschaftliches Format (Exponentialschreibweise) |
F |
Festpunktformat |
G |
Das »kompaktere« Format der Formate E und F |
N |
Festpunktformat einschließlich Tausenderseparatoren |
P |
Prozentzahl |
R |
Anzeigegarantie für alle Stellen (nur Single und Double) |
X |
Hexadezimalnotation (nur ganze Zahlen) |
Standardformatzeichen der Klasse DateTimeFormatInfo
In Tabelle 10.4 sind die wichtigsten Standardmuster zur Formatierung von Datum und Uhrzeit aufgezählt. Maßgeblich sind auch hier die Einstellungen unter Ländereinstellung. Wie schon die Standardformatmuster der Klasse NumberFormatInfo können Sie über Eigenschaften einige der Standardmuster nach eigenen Vorstellungen ändern. Weitere Informationen entnehmen Sie auch hier der .NET-Dokumentation.
Zeichen | Beschreibung |
d |
Kurzes Datum (22.09.2003) |
D |
Langes Datum (Montag, 22. September 2003) |
f |
Langes Datum inklusive Zeitangabe (Montag, 22. September 2003 22:30) |
F |
Langes Datum inklusive langer Zeitangabe (Montag, 22. September 2003 22:30:45) |
g |
Kurzes Datum inklusive Zeitangabe (22.09.2003 22:30) |
G |
Kurzes Datum inklusive langer Zeitangabe (22.09.2003 22:30:45) |
M oder m |
Tag und Monat (22 September) |
R oder r |
Datum nach dem Muster des RFC1123 (Mon, 22 Sep 2003 22:30:45 GMT) |
t |
Kurze Zeitangabe (22:30) |
T |
Lange Zeitangabe (22:30:45) |
Y oder y |
Monat und Jahr (September 2003) |
Dazu zwei Beispiele:
Dim str As String
str = String.Format("{0:F}", Now) ' Dienstag, 23. September 2003 12:12:55
str = String.Format("{0:M}", Now) ' 23 September
10.3.2 Formatierung mit ToString 

Eine Überladung der Methode ToString für Zahlen nimmt als Parameter einen Formatstring entgegen. Da nur ein Wert formatiert wird, fallen die geschweiften Klammern weg, zum Beispiel eine Fließkommazahl als Prozentzahl oder im Exponentialformat:
Dim d As Double = 0.01985
Console.WriteLine(d.ToString("P"))
Console.WriteLine(d.ToString("E"))
Auch hier wird die Einstellung der aktuellen Kultur berücksichtigt. Die Formatierung erfolgt mit den Formatzeichen der Klassen DateTimeFormatInfo und NumberFormatInfo. Um landesspezifische Ausgaben zu ermöglichen, ist auch die Übergabe eines IFormatProvider-Objekts möglich, zum Beispiel in Double.
Function ToString(provider As IFormatProvider) As String |
Verschiedene Datentypen haben unterschiedlich viele Überladungen von ToString.
10.3.3 Benutzerdefinierte Formatierung 

Über die Standardformatierung hinaus können Sie eigene Muster festlegen.
Zahlen und Zeichenfolgen
Tabelle 2.7, »Benutzerdefinierte Formate für die Ausgabe«, in Abschnitt 2.6.1, »Ausgabe mit Write und WriteLine«, zeigt bereits einige Formatierungsmöglichkeiten. Tabelle 10.5 fasst die Formatzeichen zusammen.
Zeichen | Beschreibung |
0 |
Nichtsignifikante Stellen werden durch die Zahl 0 dargestellt. |
# |
Nichtsignifikante Stellen werden durch Leerzeichen dargestellt. |
. |
Der erste Punkt bestimmt die Position des Dezimaltrennzeichens. |
, |
1) zwischen # bzw. 0: Einfügen von Tausendertrennzeichen 2) vor Dezimaltrennzeichen: je eine Division durch 1000 |
% |
Bewirkt die Multiplikation mit 100. Das Prozentzeichen wird dargestellt. |
‰ |
Bewirkt die Multiplikation mit 1000. Das Promillezeichen wird dargestellt. |
E0, E+0, E-0, e0, e+0, e-0 |
Exponentialdarstellung einer Zahl. Mit E+0 und e+0 wird das positive Vorzeichen immer angezeigt, mit allen anderen immer nur das negative. Die Anzahl der Nullen bestimmt die Mindestanzahl von Ziffern des Exponenten. |
"ABC", 'ABC' |
Die in Anführungszeichen stehenden Zeichen werden direkt in die Ergebniszeichenfolge kopiert. |
; |
Gleichzeitige Formatdefinition für positive, negative und Nullwerte. |
Hier sind einige Beispiele:
Dim d As Double = 12345.6789
Console.WriteLine(d.ToString("0000000")) ' Ausgabe: 00123456
Console.WriteLine(d.ToString("#,#####")) ' Ausgabe: 12.346
Console.WriteLine(d.ToString("#.##")) ' Ausgabe: 12345,68
Console.WriteLine(d.ToString("000e+000")) ' Ausgabe: 123e+002
Console.WriteLine(d.ToString("0%0")) ' Ausgabe: 123456%8
Datums- und Zeitangaben
Sie können mit vordefinierten Codes der Klasse DateTimeFormatInfo eigene Mustervorgaben zur Darstellung des Datums und der Uhrzeit festlegen (siehe Tabelle 10.6):
Console.WriteLine(Now.ToString("MMM/yyyy/dd")) ' Sep.2004.12
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss")) ' 09:22:30
Formatmuster | Beschreibung |
d bzw. dd |
Monatstag ohne bzw. mit führender 0 (1–31 bzw. 01–31) |
ddd |
Abkürzung des Wochentags (Mon) |
dddd |
Vollständiger Name des Wochentags (Montag) |
M bzw. MM |
Monat ohne bzw. mit führender 0 (1–12 bzw. 01–12) |
MMM |
Abkürzung des Monatsnamens (Jan) |
MMMM |
Vollständiger Monatsname (Januar) |
y bzw. yy |
Zweistellige Jahreszahl ohne bzw. mit führender 0 (3 bzw. 03) |
yyyy |
Vollständige Jahreszahl (2003) |
gg |
Angabe der Zeitära |
h bzw. hh |
Stundenangabe in 12-Stunden-Schreibweise ohne bzw. mit führender 0 |
H bzw. HH |
Stundenangabe in 24-Stunden-Schreibweise ohne bzw. mit führender 0 |
m bzw. mm |
Minutenangabe ohne bzw. mit führender 0 (0–59 bzw. 00–59) |
s bzw. ss |
Sekundenangabe ohne bzw. mit führender 0 (0–59 bzw. 00–59) |
f–ffffff |
Angabe von Sekundenbruchteilen |
t |
Erstes Zeichen von AM/PM (A entspricht AM, P entspricht PM) |
tt |
AM oder PM |
z |
Zeitzonenangabe (»+« oder »–«, dann Stundenangabe; ohne führende 0) |
zz |
Zeitzonenangabe (»+« oder »–«, dann Stundenangabe; mit führender 0) |
zzz |
Vierstellige Zeitzonenangabe |
/ |
Es wird das Standardtrennzeichen für Datumsangaben eingesetzt. |
: |
Es wird das Standardtrennzeichen für Zeitangaben eingesetzt. |
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.