2009-02-04 8 views
6

Ich möchte Sekunden (00:00:02) oder Minuten (00:00:20) auf Datetime-Wert (kann String Art gespeichert werden) aber wie? Beispiele:Add oder Summe der Stunden wie 13: 30 + 00: 00: 20 = 13: 30: 20 aber wie?

13:30+02:02:02= 15:32:02 , 
13:30+00:00:01= 13:30:01 , 
13:30+00:01:00=13:31:00 or 13:30 (not important) 

Können Sie mir helfen? Ich brauche Ihren coolen Algorithmus :) Danke nochmal ...

+0

Hallo, leider aus Ihrem Beispiel ist es nicht klar, was Sie danach sind deshalb doch gibt keine gute Antwort. Wenn Sie versuchen, mehr von dem Code anzuzeigen, den Sie haben, oder einen kurzen Überblick darüber zu geben, was Sie tatsächlich tun, kann Ihnen vielleicht jemand helfen. –

+0

plzsendtehcodez Frage. (Siehe "Ich brauche deinen coolen Algorithmus" und seine anschließende "Antwort"). –

Antwort

4

Wenn Sie den Timespan verwenden, beachten Sie über die Tage Teil:

TimeSpan t1 = TimeSpan.Parse("23:30"); 
TimeSpan t2 = TimeSpan.Parse("00:40:00"); 
TimeSpan t3 = t1.Add(t2); 
Console.WriteLine(t3); // 1.00:10:00 

Mit Datetime:

DateTime d1 = DateTime.Parse("23:30"); 
DateTime d2 = DateTime.Parse("00:40:00"); 
DateTime d3 = d1.Add(d2.TimeOfDay); 
Console.WriteLine(d3.TimeOfDay); // 00:10:00 
1

Nicht wirklich sicher, was Sie wollen, aber können Sie nicht nur die eingebauten Funktionen zu C# 's DateTime-Objekt verwenden?

DateTime myDate = DateTime.Now; 

myDate = myDate.AddHours(1); 
myDate = myDate.AddMinutes(30); 
myDate = myDate.AddSeconds(45); 
9
myDateTimeVariable.Add(new TimeSpan(2,2,2)); 
1

die Timespan-Struktur verwenden. Sie können TimeSpans zusammen hinzufügen, oder Sie können TimeSpan einer DateTime hinzufügen, um eine neue DateTime zu erstellen.

+0

ok aber 13: 30: 32 = 11:30:20 wie kann man zwei datetime hinzufügen? – Penguen

4

Hinzufügen von zwei Datetimes von Strings:

var result = DateTime.Parse(firstDate) + DateTime.Parse(secondDate); 

eine Zeichenfolge Zeit zu einem Datetime hinzu:

var result = existingDateTime.Add(TimeSpan.Parse(stringTime); 

Zeit wie in Ihrem Beispiel hinzu:

var result = TimeSpan.Parse("12:30:22") + TimeSpan.Parse("11:20:22"); 

Schließlich Ihr Beispiel als Daten (nicht getestet!):

var result = DateTime.Parse("12:30:22") + DateTime.Parse("11:20:22"); 

Beachten Sie, dass dies schlampig Codierung ist, aber Sie bekommen die Idee. Sie müssen irgendwie verifizieren, dass die Zeichenfolge tatsächlich analysierbar ist.

+0

Ich habe nicht vs 2008. Ich brauche vs 2005. Danke! – Penguen

+0

Lösung: TimeSpan a = TimeSpan.Parse ("12:30:22") + TimeSpan.Parse ("11:20:22"); Console.Write (a.ToString()); Konsole.ReadKey(); Danke everyBody! Ich liebe Stackoverflow ... – Penguen

+4

Dann markieren Sie diese Antwort als akzeptiert. –

1

Sie sollten sich TimeSpan.Parse ansehen. Dies konvertiert eine Zeichenfolge in ein TimeSpan-Objekt. Auf diese Weise können Sachen wie

TimeSpan a = TimeSpan.Parse(timeStringA)+TimeSpan.Parse(TimeStringB); 

So teilen Sie eine Zeichenfolge wie tun kann "00: 00: 20 + 00: 01: 00" sieht string.split

stringA = timeSting.split('+')[0]; 
stringb = timeSting.split('+')[1]; 
2

Das Problem ist abstrakter. Wie bereits erwähnt, gibt es in .NET zwei Arten - DateTime und TimeSpan. Der Typ DateTime repräsentiert einen bestimmten Zeitpunkt. Es ist kein Zeitintervall. Es ist ein spezifischer Ort in allen Zeiten seit der Geburt des Universums. Selbst wenn Sie die Komponenten Jahr/Monat/Tag auf 0 setzen, wird immer noch ein absoluter Zeitpunkt angegeben. Nicht eine lange Zeit.

Die TimeSpan auf der anderen Seite stellt ein gewisses Intervall. 1 Minute, 2 Tage, was auch immer. Es ist nicht angegeben WANN, wie lange.

Wenn Sie also zwei DateTime-Objekte subtrahieren, erhalten Sie ein TimeSpan-Objekt, das angibt, wie viel Zeit zwischen ihnen liegt. Und wenn Sie einer DateTime eine TimeSpan hinzufügen, erhalten Sie eine andere DateTime. Aber Sie können eine DateTime nicht zu einer anderen DateTime hinzufügen - das wäre sinnlos.

Es klingt für mich wie Sie sollten mit TimeSpan s die ganze Zeit arbeiten, weil Sie es mit Zeitspannen zu tun haben, nicht absolute Zeitpunkte. Wenn Sie diese Längen von Ihrer Quelle als DateTime bekommen, dann ist das eigentlich nicht korrekt, und Sie sollten sie irgendwie in TimeSpan s konvertieren. Die Methode zum Parsen ist eine Möglichkeit, die vorgeschlagen wurde, aber Sie könnten auch versuchen, davon Null DateTime zu subtrahieren. Das könnte schneller und kulturunabhängiger sein.

0
return string.Format("{0}:{1}:{2}", mytimespan.Hours 
    + (mytimespan.Days*24),mytimespan.Minutes,mytimespan.Seconds); 
+1

Bei StackOverflow fügen Sie bitte nicht nur Code ein, sondern erläutern auch Ihren Ansatz. In diesem speziellen Fall möchten Sie vielleicht auch erklären, was Ihre späte Antwort den bereits gegebenen (und akzeptierten) Antworten hinzufügt. –

0
static void Main(string[] args) 
    { 
     String timeText = "3/23/2015 12:00:13 AM"; 
     String timeText2 = "3/23/2015 1:45:03 AM"; 

     DateTime time = Convert.ToDateTime(timeText); 
     string temp = time.ToString("HH:mm:ss"); 

     DateTime time2 = Convert.ToDateTime(timeText2); 
     string temp2 = time2.ToString("HH:mm:ss"); 

     TimeSpan t1 = TimeSpan.Parse(temp); 
     TimeSpan t2 = TimeSpan.Parse(temp2); 

     Console.Out.WriteLine(t1 + t2); // 01:45:16 

     Console.ReadLine(); 
    } 
Verwandte Themen