Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Zeitunterschied (https://www.delphipraxis.net/53512-zeitunterschied.html)

faux 18. Sep 2005 08:08


Zeitunterschied
 
Hallo!

Kann mir mal wer ganz kurz ein Beispiel geben, wie ich in C# oder Delphi.NET mit Zeitstamps rechne?

Also ich will einer Variable die jetzige Zeit zuweisen, und später dann den Zeitunterschied zwischen der Variable und Jetzt haben...

Danke.
Faux

Khabarakh 18. Sep 2005 09:54

Re: Zeitunterschied
 
Besser kann man es doch gar nicht mehr beschreiben:
.NET FrameWork SDK-Dokumentation - DateTime-Struktur
Hinweise
Ein DateTime-Wert stellt Angaben über Datum und Uhrzeit vom 1. Januar 0001, 00:00:00 u. Z. (unserer Zeitrechnung) bis zum 31. Dezember 9999, 23:59:59 u. Z. dar.
Zeitwerte werden in Einheiten von 100 Nanosekunden gemessen, die als Ticks bezeichnet werden. Ein bestimmtes Datum ist die Anzahl Ticks seit dem 1. Januar 1, 00:00:00 u. Z. nach dem GregorianCalendar-Kalender. Ein Tickswert von 31241376000000000 stellt z. B. Freitag, den 1. Januar 0100, 00:00:00 dar. Ein DateTime-Wert bezieht sich immer auf den Kontext eines expliziten Kalenders oder eines Standardkalenders.
Die Werttypen DateTime und TimeSpan unterscheiden sich darin, dass DateTime einen Zeitpunkt und TimeSpan ein Zeitintervall darstellt. Dies bedeutet z. B., dass eine DateTime von einer anderen subtrahiert und so das dazwischen liegende Zeitintervall abgerufen werden kann. Für die Berechnung eines Datums in der Zukunft kann auch eine positive TimeSpan zur aktuellen DateTime addiert werden.
Zeitwerte können zu Instanzen von DateTime addiert werden und von ihnen subtrahiert werden. Zeitwerte können negativ oder positiv sein und in Einheiten von Ticks oder Sekunden bzw. als Instanzen von TimeSpan ausgedrückt werden. Die Methoden und Eigenschaften dieses Werttyps berücksichtigen Einzelheiten wie Schaltjahre und die Anzahl der Tage eines Monats.
Beschreibungen von Zeitwerten dieses Typs werden oft mit Hilfe des UTC-Standards (Coordinated Universal Time) angegeben, der früher als GMT (Greenwich Mean Time) bezeichnet wurde.
Berechnungen und Vergleiche von DateTime-Instanzen sind nur dann sinnvoll, wenn die Instanzen in derselben Zeitzone erstellt wurden. Aus diesem Grund wird davon ausgegangen, dass der Entwickler über einen externen Mechanismus verfügt, z. B. eine explizite Variable oder Richtlinie, aus der hervorgeht, in welcher Zeitzone eine DateTime erstellt wurde. Die Methoden und Eigenschaften dieser Struktur verwenden bei Berechnungen und Vergleichen immer die lokale Zeitzone.
Bei einer Berechnung mit einer Instanz von DateTime, z. B. Add oder Subtract, wird der Wert der Instanz nicht geändert. Die Berechnung gibt hingegen eine neue Instanz von DateTime zurück, deren Wert das Ergebnis der Berechnung ist.
Alle DateTime-Member verwenden implizit den gregorianischen Kalender für Operationen. Ausnahmen hierbei sind Konstruktoren, die einen Kalender angeben, und Methoden, die implizit einen Kalender mit einem von IFormatProvider abgeleiteten Parameter angeben, z. B. System.Globalization.DateTimeFormatInfo. Mit Hilfe der System.Globalization.Calendar-Klasse können Datum- und Uhrzeitoperationen mit einem anderen Kalender ausgeführt werden.
Dieser Typ erbt von IComparable, IFormattable und IConvertible. Verwenden Sie für Konvertierungen die Convert-Klasse anstelle der expliziten Implementierung der Schnittstellenmember von IConvertible für diesen Typ.
Beispiel
[Visual Basic, C#, C++] Das folgende Beispiel veranschaulicht das Vergleichen äquivalenter DateTime-Werte, wobei ein geringer Unterschied für die Bestimmung als "gleich" zulässig ist.

Code:
class DateTimeTester {

    static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
    {

            long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds % frequencyInSeconds;

            delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

            return Math.Abs(delta) < windowInSeconds;

    }

    public static void Main()
    {
            int window = 10;
            int freq = 60 * 60 * 2; // 2 hours;

            DateTime d1 = DateTime.Now;

            DateTime d2 = d1.AddSeconds(2 * window);
            DateTime d3 = d1.AddSeconds(-2 * window);
            DateTime d4 = d1.AddSeconds(window / 2);
            DateTime d5 = d1.AddSeconds(-window / 2);

            DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
            DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
            DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
            DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

            Console.WriteLine("d1 ~= d1 [true]: " + RoughlyEquals(d1, d1, window, freq));
            Console.WriteLine("d1 ~= d2 [false]: " + RoughlyEquals(d1, d2, window, freq));
            Console.WriteLine("d1 ~= d3 [false]: " + RoughlyEquals(d1, d3, window, freq));
            Console.WriteLine("d1 ~= d4 [true]: " + RoughlyEquals(d1, d4, window, freq));
            Console.WriteLine("d1 ~= d5 [true]: " + RoughlyEquals(d1, d5, window, freq));

            Console.WriteLine("d1 ~= d6 [false]: " + RoughlyEquals(d1, d6, window, freq));
            Console.WriteLine("d1 ~= d7 [false]: " + RoughlyEquals(d1, d7, window, freq));
            Console.WriteLine("d1 ~= d8 [true]: " + RoughlyEquals(d1, d8, window, freq));
            Console.WriteLine("d1 ~= d9 [true]: " + RoughlyEquals(d1, d9, window, freq));


    }
}

faux 18. Sep 2005 13:34

Re: Zeitunterschied
 
DANKE!
Genau sowas hab ich gesucht.. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz