Jaki jest zalecany sposób formatowania TimeSpan
obiektów na ciąg o niestandardowym formacie?
Uwaga: ta odpowiedź dotyczy wersji .Net 4.0 i nowszych. Jeśli chcesz sformatować TimeSpan w .Net 3.5 lub niższej, zapoznaj się z odpowiedzią JohannesH .
Niestandardowe ciągi formatu TimeSpan zostały wprowadzone w .Net 4.0. Pełne odniesienie do dostępnych specyfikatorów formatu można znaleźć na stronie Ciągi formatu niestandardowego formatu czasu MSDN .
Oto przykładowy ciąg formatu okresu:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( UPDATE ), a oto przykład z interpolacją ciągów C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Musisz uciec ze znaku „:” za pomocą „\” (który sam musi być poprzedzony znakiem ucieczki, chyba że używasz pełnego ciągu).
Ten fragment strony MSDN Niestandardowe ciągi formatu formatu TimeSpan wyjaśnia, jak unikać znaków „:” i „.” znaki w ciągu formatu:
Specyfikatory niestandardowego formatu TimeSpan nie zawierają symboli zastępczych symboli zastępczych, takich jak symbole, które oddzielają dni od godzin, godzin od minut lub sekund od ułamków sekund. Zamiast tego symbole te muszą być zawarte w ciągu formatu niestandardowego jako literały ciągu. Na przykład „dd.hh: mm” definiuje kropkę (.) Jako separator między dniami a godzinami, a dwukropek (:) jako separator między godzinami a minutami.
myTimeSpan = new TimeSpan(15, 35, 54);
instrukcjimyTimeSpan .ToString("hh\\mm\\ss");
będzie wynik15m35s54
. Nie sądzę, że to było to, co zamierzałeś, ponieważ będzie to m po twoich godzinach i s po twoich minutach.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Z punktu widzenia użytkownika może być lepiej podać liczbę dni, nikt nie chce mentalnie dowiedzieć się, ile dni zajmuje ponad 200 godzin.W przypadku .NET 3.5 i niższych można użyć:
Kod pochodzi z Jon Skeet odpowiedź na bajty
W przypadku platformy .NET 4.0 i nowszych patrz odpowiedź DoctaJonez .
źródło
Jednym ze sposobów jest utworzenie
DateTime
obiektu i użycie go do formatowania:W ten sposób wiem. Mam nadzieję, że ktoś może zaproponować lepszy sposób.
źródło
Prosty. Używaj
TimeSpan.ToString
z c, g lub G. Więcej informacji na MSDNźródło
Poszedłbym z
źródło
Działa dla Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
źródło
Osobiście podoba mi się to podejście:
Możesz to zrobić tak, jak chcesz, bez żadnych problemów:
źródło
To jest niesamowite:
źródło
Możesz także skorzystać z:
EDYTOWAĆ:
Możesz także spojrzeć na Strings.Format .
źródło
Wszystkie dosłowne znaki muszą zostać usunięte.
źródło
Użyłem kodu poniżej. Jest długi, ale nadal jest jednym wyrażeniem i daje bardzo przyjazny wynik, ponieważ nie generuje dni, godzin, minut ani sekund, jeśli mają wartość zero.
W próbce daje wynik: „4 dni 1 godzina 3 sekundy”.
źródło
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Nazwij to dla każdego komponentu (np.timeComponent(sp.Days, "day")
), A następnie użyj,String.join
aby wstawić spacje.Używam tej metody. Jestem Belgiem i mówię po holendersku, więc liczba godzin i minut to nie tylko dodanie „s” na końcu, ale prawie inne słowo niż liczba pojedyncza.
To może wydawać się długie, ale myślę, że jest bardzo czytelne:
źródło
Takie podejście zastosowałem w przypadku formatowania warunkowego. i zamieszczam go tutaj, ponieważ uważam, że to czysty sposób.
przykład wyników:
Formatowanie jest łatwe.
time.Days:#0:;;\\
poprzedni format;;
dotyczy sytuacji, gdy wartość jest dodatnia. wartości ujemne są ignorowane. a dla wartości zerowych mamy;;\\
, aby ukryć go w sformatowanym ciągu. zwróć uwagę, że odwrócony ukośnik jest konieczny, w przeciwnym razie nie zostanie poprawnie sformatowany.źródło
Oto moja metoda rozszerzenia :
Przykładowe wywołanie:
Wynik:
źródło
To jest problem w VS 2010, oto moje rozwiązanie obejścia.
źródło
Ta
Substring
metoda działa idealnie, gdy chcesz tylko Godziny: Minuty: Sekundy. Jest to prosty, przejrzysty kod i łatwy do zrozumienia.źródło
Oto moja wersja. Pokazuje tylko tyle, ile jest to konieczne, radzi sobie z pluralizacją, negatywami i starałem się, aby była lekka.
Przykłady wyników
Kod
źródło
Jeśli chcesz format czasu trwania podobny do youtube, biorąc pod uwagę liczbę sekund
Wynik:
źródło
Chciałem zwrócić ciąg znaków, taki jak „1 dzień 2 godziny 3 minuty”, a także wziąć pod uwagę, jeśli na przykład dni lub minuty są równe 0, a następnie ich nie pokazuje. dzięki Johnowi Raschowi za odpowiedź, której moje jest zaledwie przedłużeniem
źródło