답변:
시험:
myTimeSpan.ToString("h'h 'm'm 's's'")
(공백도 따옴표로 묶어야합니다. 이것이 제 첫 시도에서 잘못된 점입니다.)
물론 .NET 4를 사용하고 있다고 가정합니다. 그 전에는 TimeSpan사용자 지정 형식 문자열을 지원하지 않았습니다.
편집 : 언급했듯이 24 시간 이상은 작동하지 않습니다. 또한 Noda Time을 통해 대안을 사용할 수도 있습니다. :)
Jon Skeet의 답변을 다음과 같은 코드로 사용할 때 이것을 유의하십시오.
// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);
string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();
다음과 같은 결과를 얻습니다.
23h 24m 2s
3h 24m 2s
시간 형식은 최대 23 시간을 표시 할 수 있습니다. 27 시간을 표시하거나 12 일을 시간으로 변환하지 않고 존재하지 않은 것처럼 단순히 잘라냅니다.
이 문제를 해결하는 한 가지 방법은 TimeSpan의 길이를 확인하고 기간이 1 년, 일 등인지 여부에 따라 서식을 만드는 확장 프로그램을 만드는 것입니다. 또는 날짜가 끊기지 않기 때문에 항상 날짜를 표시 할 수도 있습니다.
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
나는 프로그래밍 초보자입니다. 이것은 내가 모든 시간을 보여줄 것이라고 가정 한 후에 이것을 알아 차릴만큼 운이 좋았을 때의 관찰에서 나온 것입니다. 끝없는 시간을 표시 할 수있는 다른 시간 형식과 같은 더 나은 솔루션이 있는지 모르겠 기 때문에 이것을 말하는 것입니다.
그러나이 형식이 의도 한 기능을 수행하고 있다고 생각합니다. 당신은 그것을 알고 있어야합니다. 따라서이 게시물. Jon Skeet의 대답은이 형식이 시간이 최대 23 일 수있는 날짜 유형 형식의 시간 속성 만 표시한다는 것을 결코 나타내지 않았습니다.
TotalHoursTimeSpan에 등이 있습니다. 당신은 아마이 원Math.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
.NET4를 사용하지 않을만큼 불행한 경우 :
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHours은 최신 버전의 .net에서도 사용할 수 있습니다.
TotalHours하는 경우 double,는 int유사 하지 않으므로 주의하십시오 Hours. 즉, 전체 시간뿐만 아니라 몇 시간도 표시됩니다.
어떨까요?
String oTime = myTimeSpan.ToString("h") + "h " +
myTimeSpan.ToString("m") + "m " +
myTimeSpan.ToString("s") + "s "
업데이트 1 :
작은 따옴표로 이스케이프 할 수 있습니다. h'h 'm'm 's's'
Hours, Minutes, SecondsIMO 속성. 인용을 알아 낸 후 개인적으로 사용자 지정 형식 문자열을 사용하고 싶습니다.
이 작은 코드는 구문 분석 및 역방향으로 도움이됩니다.
var t = TimeSpan.FromMilliseconds(450780);
double d1 = t.TotalSeconds;
string t3 = t.ToString(@"hh\:mm\:ss\.f",null);
var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null);
double d2 = tt.TotalSeconds;
사용 Xamarin하고 .NET Portable 4.5이것은 여기에서 다른 모든 답변을 시도한 후 작업 한 유일한 형식이었습니다.
timespan.ToString("hh':'mm':'ss");
본질적으로 나는 :그들을 이스케이프하기 위해 작은 따옴표를 넣습니다.