Jaki jest najlepszy sposób na przeliczenie sekund na czas (Godzina: Minuty: Sekundy: Milisekundy)?
Powiedzmy, że mam 80 sekund, czy są jakieś specjalne klasy / techniki w .NET, które pozwoliłyby mi przekonwertować te 80 sekund na format (00h: 00m: 00s: 00ms) jak na DateTime czy coś takiego?
using System;
Klasa znajduje się wSystem.TimeSpan
.W przypadku .NET> 4.0 można użyć
lub jeśli chcesz format daty i godziny, możesz to zrobić
Aby uzyskać więcej informacji, możesz sprawdzić ciągi formatu niestandardowego TimeSpan
źródło
HH
jest tam nieważne..NET/C#
.ToString(@"hh\:mm\:ss\:fff");
jest już w24hr
formacie.HH
nie jest tam ważny z takim wejściem ( błąd jestInput string was not in a correct format.
)Jeśli wiesz, że masz kilka sekund, możesz utworzyć wartość TimeSpan, wywołując TimeSpan.FromSeconds:
Następnie możesz uzyskać liczbę dni, godzin, minut lub sekund. Lub użyj jednego z przeciążeń ToString, aby wyprowadzić go w dowolny sposób.
źródło
Zrobiłem kilka testów porównawczych, aby zobaczyć, co jest najszybszym sposobem, a oto moje wyniki i wnioski. Uruchomiłem każdą metodę 10 milionów razy i dodałem komentarz ze średnim czasem na uruchomienie.
Jeśli twoje milisekundy wejściowe nie są ograniczone do jednego dnia (wynik może wynosić 143: 59: 59.999), są to opcje od szybszego do wolniejszego:
Jeśli twoje milisekundy wejściowe są ograniczone do jednego dnia (wynik nigdy nie będzie większy niż 23: 59: 59.999), są to opcje od szybszego do wolniejszego:
W przypadku, gdy Twój wkład zajmuje zaledwie kilka sekund , metody są nieco szybsze. Ponownie, jeśli twoje sekundy wejściowe nie są ograniczone do jednego dnia (twój wynik może wynosić 143: 59: 59):
A jeśli twoje sekundy wejściowe są ograniczone do jednego dnia (twój wynik nigdy nie będzie większy niż 23:59:59):
Na koniec dodam, że zauważyłem, że
string.Format
jest to nieco szybsze, jeśli używaszD2
zamiast00
.źródło
http://msdn.microsoft.com/en-us/library/system.timespan.fromseconds.aspx
źródło
Konstruktor TimeSpan pozwala przejść w kilka sekund. Po prostu zadeklaruj zmienną typu TimeSpan ilość sekund. Dawny:
źródło
Sugeruję skorzystanie z tej
TimeSpan
klasy.Wyjścia:
źródło
W VB.NET, ale tak samo jest w C #:
źródło
W przypadku .NET <4.0 (np. Unity ) możesz napisać metodę rozszerzenia, która będzie
TimeSpan.ToString(string format)
zachowywać się jak .NET> 4.0Z dowolnego miejsca w kodzie możesz go używać w następujący sposób:
W ten sposób możesz sformatować dowolny
TimeSpan
obiekt, po prostu wywołując ToString z dowolnego miejsca w kodzie.źródło
Dlaczego ludzie potrzebują TimeSpan AND DateTime, jeśli mamy DateTime.AddSeconds ()?
Data jest dowolna. totalSeconds może być większy niż 59 i jest podwójny. Następnie możesz sformatować swój czas, jak chcesz za pomocą DateTime.ToString ():
To nie działa, jeśli totalSeconds <0 lub> 59:
źródło
//Test
źródło
aby uzyskać całkowite sekundy
i uzyskać datę / godzinę z sekund
źródło
Zwróci to w formacie hh: mm: ss
źródło
ConvertTime(80)
Zwraca0:1:20
iConvertTime(61)
zwraca.0:1:1
Oba sąh:m:s
. Korzystanie z interpolacji ciągów powoduje również powstanie dłuższego kodu niżToString()
w przypadku innych odpowiedzi, a także utrudnia wizualizację sformatowanej długości ciągu.