wake-up-neo.com

Konvertieren Sie DateTime.Now in Sekunden

Ich versuche, eine Funktion zu schreiben, die eine DateTime.Now-Instanz in die Anzahl von Sekunden konvertiert, die sie darstellt, damit ich diese mit einer anderen DateTime-Instanz vergleichen kann. Folgendes habe ich momentan:

public static int convertDateTimeToSeconds(DateTime dateTimeToConvert)
    {
        int secsInAMin = 60;
        int secsInAnHour = 60 * secsInAMin;
        int secsInADay = 24 * secsInAnHour;
        double secsInAYear = (int)365.25 * secsInADay;

        int totalSeconds = (int)(dateTimeToConvert.Year * secsInAYear) + 
                       (dateTimeToConvert.DayOfYear * secsInADay) +
                       (dateTimeToConvert.Hour * secsInAnHour) +
                       (dateTimeToConvert.Minute * secsInAMin) + 
                       dateTimeToConvert.Second;

        return totalSeconds;
    }

Ich stelle fest, dass ich die Berechnung für Sekunden in einem Jahr abschneide, aber ich brauche meine Berechnung nicht, um genau zu sein. Ich schaue wirklich, ob die Methode, die ich zur Berechnung von Sekunden verwende, richtig ist.

Hat jemand etwas, das Sekunden aus einem DateTime-Objekt besser berechnen könnte? 

Soll der Rückgabetyp int64 sein, wenn ich in C # codiere, wenn ich alle Sekunden seit 0 AD berechnen werde?

14
TheDevOpsGuru

Der DateTime Typ unterstützt Vergleichsoperatoren :

if (dateTimeA > dateTimeB)
{
    ...

Dies funktioniert auch für DateTime - Werte, die von DateTime.AddSeconds zurückgegeben werden:

if (dateTimeA.AddSeconds(42) > dateTimeB)
{
    ...

Wenn Sie wirklich die Anzahl der Sekunden wünschen, die seit 01/01/0001 00:00:00 vergangen sind, können Sie die Differenz zwischen den beiden DateTime-Werten berechnen. Der resultierende TimeSpan -Wert hat eine TotalSeconds -Eigenschaft:

double result = DateTime.Now.Subtract(DateTime.MinValue).TotalSeconds;
27
dtb

Es macht wirklich keinen Sinn, ein DateTime-Objekt in Sekunden zu konvertieren. Sekunden sind nur sinnvoll, wenn Sie sich mit einer Zeitspanne beschäftigen (TimeSpan). Wenn Sie zwei Daten vergleichen möchten, um die Anzahl der Sekunden zwischen ihnen zu ermitteln:

TimeSpan diff = DateTime.Now - PreviousDateTime;
double seconds = diff.TotalSeconds;
8
rein

Siehe den Vorschlag von Thread unten:

Wie konvertiere ich Ticks in Minuten?

TimeSpan.FromTicks(DateTime.Now.Ticks).TotalSeconds; 
6
Chris Baxter

Wenn der Zweck darin besteht, die Anzahl von Sekunden zwischen zwei Datumsangaben zu ermitteln, wäre es mit dem Objekt TimeSpan / wesentlich besser.

TimeSpan span = date2 - date1;
double seconds = span.TotalSeconds;
5
GendoIkari

Wenn Sie 2 DateTime-Objekte vergleichen möchten, verwenden Sie die bereitgestellten Operatoren. http://msdn.Microsoft.com/en-us/library/aa326723%28v=VS.71%29. aspx

DateTime a, b;
if (a > b) //a is after b
4
RvdK

Angenommen, Sie müssen wirklich die Sekunden für das datetime-Objekt erhalten, könnten Sie die Eigenschaft "Ticks" direkt davon abrufen. Diese Angaben sind nicht in Sekunden, aber Sie können leicht durch den richtigen Faktor dividieren, um die Ticks in Sekunden umzuwandeln. Siehe: http://msdn.Microsoft.com/de-de/library/system.datetime .ticks.aspx

So etwas wie:

        DateTime.Now.Ticks/TimeSpan.TicksPerSecond
4
Joe L.

Ich würde die TimeSpan-Klasse verwenden, um den genauen Unterschied zwischen zwei DateTime-Instanzen zu ermitteln. Hier ist ein Beispiel:

  DateTime dt1 = DateTime.Now;
  DateTime dt2 = new DateTime(2003,4,15);
  TimeSpan ts = dt1.Subtract(dt2);

Sobald der TimeSpan-Wert (ts im obigen Code-Snippet) verfügbar ist, können Sie seine Werte überprüfen, um das TimeSpan richtig in eine bestimmte Anzahl von Sekunden zu konvertieren.

3
JeffFerguson

Die Verwendung einer TimeSpan zum Abrufen der verstrichenen Zeit zwischen zwei DateTimes ist wahrscheinlich der beste Weg, aber wenn Sie wirklich möchten, um die Anzahl der Sekunden für eine bestimmte DateTime zu ermitteln, können Sie Folgendes tun:

DateTime dateTimeToConvert = DateTime.Now;
TimeSpan tsElapsed = dateTimeToConvert - DateTime.MinValue;
return tsElapsed.TotalSeconds;

Beachten Sie, dass tsElapsed.TotalSeconds ein Double ist, kein Int.

2
TLiebe

Beachten Sie, dass das Ziel darin besteht, die Anzahl der Sekunden seit DateTime.MinVal (dem ersten Tag des Kalenders) abzurufen. Ich sage das, weil ich alle diese Antworten für "Sie sehen Zeitvergleiche wie diese ..." in das Objekt einfügen, mit diesem Objekt multiplizieren und Kreuzkalkulation darauf, dividieren durch den Quotienten des summierten Ergebnisses und "Boom" ! nicht was Sie gefragt haben. "

Hier gibt es eine wirklich einfache Antwort. Ticks sind 100-Nanosekunden-Inkremente. DateTime object.Ticks ist die Anzahl der Ticks, die seit dem 01.01.10001 aufgetreten sind. Das heißt, Jahr Null. Es gibt 10 Millionen Nanosekunden in einer Sekunde. so...

    public static long convertDateTimeToSeconds(DateTime dateTimeToConvert) {
        // According to Wikipedia, there are 10,000,000 ticks in a second, and Now.Ticks is the span since 1/1/0001. 
        long NumSeconds= dateTimeToConvert.Ticks / 10000000;
        return NumSeconds;
    }
0
Michieal