2016-04-12 11 views
0

Ich versuche, ein Datum von heute zu formatieren, um einige Sekunden, Stunden, vielleicht Tage, ähnlich wie Clash of Clans Timer Wie diese Arbeit:C# Datumsformat über 1 Tag

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
dateTime = dateTime.AddSeconds(80000); 

return dateTime.ToString("H'h' mm'min'"); 

Es funktioniert tatsächlich groß Ich bekomme '22h 13min', nur für Minuten und Stunden. Wenn ich versuche, Tage damit zu drucken, wie folgt:

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
dateTime = dateTime.AddSeconds(80000); 

return dateTime.ToString("d'd' H'h' mm'min'"); 

Ich habe '1d 22h 13min' zurückgegeben. Wenn ich zum Beispiel versuche, 1 Tag in Sekunde (86400 Sekunden) zu konvertieren, gibt dieser Code 2 Tage statt 1 Tag zurück.

Wie kann ich dieses Problem richtig lösen ohne Tricks wie harte Subtraktion um 1 am Tag zurückgegeben?

EDIT1: Zum Beispiel erwartetes Ergebnis für einen Tag ist:

System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
dateTime = dateTime.AddSeconds(86400); 
return dateTime.ToString("d'j' H'h' mm'min'"); 

Rückkehr 2d 0h 00min, statt 1d 0h 00min.

+2

ich Ihre Frage nicht verstehen. Können Sie bitte genauer sein? Wenn Sie '86400' hinzufügen, wird' 2d 0h 00min' wie erwartet zurückgegeben. –

+0

Ich kann Ihr Szenario und Ihr erwartetes Ergebnis nicht verstehen. Können Sie den Code mit "versuchen, 1 Tag in Sekunde (86400sec) zu konvertieren, wird dieser Code 2 Tage statt 1 Tag zurückgeben."? –

+2

Für 'DateTime' ist Tag der Tag des Monats. Was Sie wollen, ist eine 'TimeSpan'. – juharr

Antwort

0

Für DateTime ist Tag der Tag des Monats. Was Sie wollen, ist ein TimeSpan.

var span = TimeSpan.FromSeconds(80000); 
Console.WriteLine(span.ToString(@"d'd 'h'h 'm'min'")); 

Ausgänge

0d 22h 13min

+0

Vielen Dank, ich habe nur falsche lib verwendet, TimeSpan wird tun was ich will :) – dmo

0

Ihr Code dateTime = dateTime.AddSeconds(80000); den Wert 1/1/1970 10:13:20 zum dateTime Variablen zuweisen, daher werden Sie die Ausgabe als 1d 22h 13min von dateTime.ToString("d'd' H'h' mm'min'"); bekommen. Also, wenn Sie den nächsten Tag bekommen möchten, können Sie dateTime = dateTime.AddDays(1); verwenden oder es als Sekunden hinzufügen, wie Sie getan haben. dh dateTime = dateTime.AddSeconds(86400);

0

The "d" format specifier gibt die Tagesnummer des Monats zurück. Da Sie zum 1. Januar 1 Tag hinzufügen, wird es der 2. Januar sein und deshalb gibt dieser Spezifizierer 2 zurück.

Wenn ich klar verstehe, möchten Sie stattdessen TimeSpan verwenden.

TimeSpan ts = TimeSpan.FromSeconds(86400); 
ts.ToString("d'd 'h'h 'mm'min'"); // 1d 0h 00min 

oder

TimeSpan ts = TimeSpan.FromSeconds(80000); 
ts.ToString("d'd 'h'h 'mm'min'"); // 0d 22h 13min 

Dann können Sie diesen Wert zu formatieren.

Oder Sie können DateTime.AddDays method verwenden, um subctact 1 Tag wie

dateTime = dateTime.AddDays(-1); 

für Ihre dateTime wenn Sie wirklich wollen DateTime verwenden.