Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 5. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Weitere .NET-Datentypen
7 Weitere Möglichkeiten von C#
8 Auflistungsklassen (Collections)
9 Fehlerbehandlung und Debugging
10 LINQ to Objects
11 Multithreading und die Task Parallel Library (TPL)
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 Einige wichtige .NET-Klassen
15 Projektmanagement und Visual Studio 2010
16 XML
17 WPF – Die Grundlagen
18 WPF-Containerelemente
19 WPF-Steuerelemente
20 Konzepte der WPF
21 Datenbindung
22 2D-Grafik
23 ADO.NET – verbindungsorientierte Objekte
24 ADO.NET – Das Command-Objekt
25 ADO.NET – Der SqlDataAdapter
26 ADO.NET – Daten im lokalen Speicher
27 ADO.NET – Aktualisieren der Datenbank
28 Stark typisierte DataSets
29 LINQ to SQL
30 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2010 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2010

Visual C# 2010
geb., mit DVD
1295 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1552-7
Pfeil 14 Einige wichtige .NET-Klassen
Pfeil 14.1 Die Klasse »Object«
Pfeil 14.1.1 Referenzvergleiche mit »Equals« und »ReferenceEquals«
Pfeil 14.1.2 »ToString« und »GetType«
Pfeil 14.1.3 Die Methode »MemberwiseClone«
Pfeil 14.2 Die Klasse »String«
Pfeil 14.2.1 Erzeugen eines Strings
Pfeil 14.2.2 Eigenschaften von »String«
Pfeil 14.2.3 Methoden der Klasse »String«
Pfeil 14.2.4 Zusammenfassung der Klasse »String«
Pfeil 14.3 Die Klasse »StringBuilder«
Pfeil 14.3.1 Allgemeines
Pfeil 14.3.2 Kapazität eines »StringBuilder«-Objekts
Pfeil 14.3.3 Konstruktoren der Klasse »StringBuilder«
Pfeil 14.3.4 Eigenschaften der Klasse »StringBuilder«
Pfeil 14.3.5 Die Methoden der Klasse »StringBuilder«
Pfeil 14.3.6 Allgemeine Anmerkungen
Pfeil 14.4 Der Typ »DateTime«
Pfeil 14.4.1 Zeitspanne »Tick«
Pfeil 14.4.2 Konstruktoren von »DateTime«
Pfeil 14.4.3 Eigenschaften von »DateTime«
Pfeil 14.4.4 Methoden der Klasse »DateTime«
Pfeil 14.5 Die Klasse »TimeSpan«
Pfeil 14.6 Ausgabeformatierung
Pfeil 14.6.1 Formatierung mit der Methode »String.Format«
Pfeil 14.6.2 Formatierung mit der Methode »ToString«
Pfeil 14.6.3 Benutzerdefinierte Formatierung


Galileo Computing - Zum Seitenanfang

14.5 Die Klasse »TimeSpan« topZur vorigen Überschrift

Aus den Methoden zur Manipulation einer DateTime-Instanz ragt eine heraus, deren Parametertyp sich von denen der anderen, gleichartigen Methoden unterscheidet. Es ist die Methode Add, deren Definition wir uns anschauen wollen:


public DateTime Add(TimeSpan);

Dem Parameter wird ein Objekt vom Typ TimeSpan übergeben. Dieser Typ scheint nur auf den ersten Blick dem Typ DateTime zu ähneln, aber beide unterscheiden sich grundlegend: Mit DateTime wird ein definitives Datum beschrieben, mit TimeSpan eine Zeitspanne. Dies machen auch die Konstruktoren der TimeSpan-Klasse deutlich, die Tage, Stunden, Minuten usw. entgegennehmen.

Der folgende Beispielcode zeigt, wie eine Referenz auf eine TimeSpan-Instanz an die Methode Add übergeben wird:


DateTime now = new DateTime(2002, 2, 3, 12, 0, 0);
TimeSpan mySpan = new TimeSpan(3, 12, 15);
now = now.Add(mySpan);
Console.WriteLine(now);

In der ersten Codezeile wird die Klasse DateTime instanziiert und dem Konstruktor das Datum 3. Februar 2002 12:00 Uhr übergeben. In der folgenden Anweisung erzeugen wir das TimeSpan-Objekt mySpan. Der Konstruktor mit drei Parametern übernimmt als Argumente Stunden, Minuten und Sekunden – er beschreibt demnach eine Zeitspanne von drei Stunden, zwölf Minuten, 15 Sekunden. Der Add-Methode wird danach das TimeSpan-Objekt übergeben, mit dem Datum und Zeit neu bestimmt werden.

Eine Reihe vordefinierter Konstanten erleichtert die Umrechnung von Zeiteinheiten in Ticks, wenn unterschiedliche Zeitangaben mittels eines Faktors auf eine gemeinsame Einheitsbasis gebracht werden müssen – diese Basis bilden bekanntlich die Ticks. So beschreibt die Konstante TicksPerDay beispielsweise die Anzahl der Ticks pro Tag, und TicksPerHour gibt die Ticks pro Stunde an.

Das folgende Beispiel zeigt, wie diese Konstanten sinnvoll eingesetzt werden können. Die benutzerdefinierten Funktionen DiffHours und DiffSeconds nehmen jeweils eine Referenz vom Typ DateTime entgegen und berechnen den Unterschied zwischen zwei Datumswerten in Stunden bzw. Sekunden. Dabei ist der erste Datumswert das aktuelle Systemdatum, das wie üblich über Now ermittelt wird, und den zweiten Datumswert muss der Anwender an der Konsole eingeben.


// ---------------------------------------------------------
// Beispiel: ...\Kapitel 14\Zeitdifferenz
// ---------------------------------------------------------
class Program {
  static void Main(string[] args) {
    // aktuelle Systemzeit festlegen 
    DateTime actDate = DateTime.Now;    
    // das zu vergleichende Datum entgegennehmen
    Console.Write("Geben Sie das Vergleichsdatum ");
    Console.Write("im Format tt.mm.jjjj ein:  ");
    string strDate = Convert.ToString(Console.ReadLine());
    // Eingabe passend formatieren
    strDate = strDate.Replace('.', '/');
    DateTime newDate = Convert.ToDateTime(strDate);
    // Ausgabe der Differenz in Stunden
    Console.Write("Die Differenz in Stunden: ");
    Console.WriteLine(DiffHours(actDate, newDate));
    // Ausgabe der Differenz in Sekunden
    Console.Write("Die Differenz in Sekunden: ");
    Console.WriteLine(DiffSeconds(actDate, newDate));
    Console.ReadLine();
  }
  public static long DiffHours(DateTime d1,DateTime d2) {
    long x = d2.Ticks - d1.Ticks;
    return Convert.ToInt64(x / TimeSpan.TicksPerHour);
  }
  public static long DiffSeconds(DateTime d1,DateTime d2) {
    long x = d2.Ticks - d1.Ticks;
    return Convert.ToInt64(x / TimeSpan.TicksPerSecond);
  }
}

Das Eingabeformat ist vorgeschrieben, da es nach der Bestätigung durch den Aufruf der Methode in ein Format überführt wird, das einem DateTime-Typ entspricht.

Der Algorithmus des Programmcodes in den beiden Methoden DiffHours und DiffSeconds ist ähnlich. Beide Routinen nehmen in ihren Parametern Referenzen des Typs DateTime entgegen und rechnen das jeweilige Datum mit der Eigenschaft Ticks zunächst in die Basiseinheit um, um im Anschluss daran die Differenz zu bilden. Die abschließende Division durch TicksPerHour bzw. TicksPerSecond liefert einen long, der dem Aufrufer zurückgegeben wird.

Weitere Möglichkeiten der Klasse »TimeSpan«

Eine TimeSpan-Instanz beschreibt eine Zeitspanne aus Tagen, Stunden, Minuten, Sekunden und Millisekunden. Diese Zeitspanne lässt sich in einem String abbilden, der dem folgenden Format entspricht:


Tag.Stunden:Minuten:Sekunden.Sekundenbruchteil

Dazu ein Beispiel. Mit


TimeSpan myTimeSpan = new TimeSpan(2, 12, 30, 22, 100);
Console.WriteLine(myTimeSpan.ToString());

erhalten Sie die folgende Ausgabe:


2.12:30:22.1000000

Manchmal ist es notwendig, die Angabe einer Zeitspanne in eine konkrete Zeiteinheit umzurechnen oder aus der Angabe einer Zahl, die eine Zeiteinheit widerspiegelt, ein TimeSpan-Objekt zu erzeugen. Auch dazu liefert die Klasse TimeSpan die passenden Methoden. Nehmen wir an, Sie wollten das mit


TimeSpan span = new TimeSpan(1, 35, 45);

erzeugte Objekt, das einen Tag, 35 Minuten und 45 Sekunden beschreibt, in eine Zahl umwandeln. Es stellt sich mit den Möglichkeiten der Klasse nur noch die Frage, ob Sie eine Ganzzahl oder eine Dezimalzahl benötigen. Für beide Fälle gibt es die passenden Eigenschaften. Beispielsweise liefert

  • die Hours-Eigenschaft einen int und
  • die TotalHours-Eigenschaft einen double.

Die Anweisung


Console.WriteLine(span.TotalHours);

wird das Ergebnis 1,5958333333333 haben. Beim Aufruf von Hours wird der Dezimalteil abgeschnitten. Analog lautende Eigenschaften gibt es auch, um mit Tagen, Minuten oder Sekunden zu operieren.

Einige statische Methoden des Typs TimeSpan ermöglichen es auch ohne Initialisierung, einer TimeSpan-Variablen einen Wert zuzuweisen. Diese Methoden beginnen mit dem Präfix From, beispielsweise FromSeconds, FromMinutes, FromDays.


// Die Anweisung beschreibt eine Zeitspanne von 3 Stunden.
TimeSpan ts = TimeSpan.FromHours(3);



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2010

Visual C# 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




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