[c#] TimeSpan ToString 형식

궁금한 점이 있습니다. “5h 3m 30s”와 같은 출력에 사용할 수있는 형식 문자열이 있습니까?

예. (분명히 틀렸다)

myTimeSpan.ToString("hh mm ss")



답변

시험:

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 일 수있는 날짜 유형 형식의 시간 속성 만 표시한다는 것을 결코 나타내지 않았습니다.


답변

.NET4를 사용하지 않을만큼 불행한 경우 :

string.Format("{0}h{1}m{2}s",
    myTimeSpan.Hours,
    myTimeSpan.Minutes,
    myTimeSpan.Seconds);


답변

어떨까요?

String oTime = myTimeSpan.ToString("h") + "h " +
               myTimeSpan.ToString("m") + "m " +
               myTimeSpan.ToString("s") + "s "

업데이트 1 :

작은 따옴표로 이스케이프 할 수 있습니다. h'h 'm'm 's's'


답변

이 작은 코드는 구문 분석 및 역방향으로 도움이됩니다.

        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");

본질적으로 나는 :그들을 이스케이프하기 위해 작은 따옴표를 넣습니다.


답변

가끔 정규식과 비슷한 형식 문자열을 찾습니다. 나중에 코드로 돌아 오면 뉘앙스를 잊어 버렸습니다. 따라서 다음과 같이 문서를 다시 보낼 가능성이 적습니다.

string FormatTimeSpan(TimeSpan timeSpan) =>
    $"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";

C # 6에 도입 된 문자열 보간은 다른 방법보다 훨씬 더 명확하게 만듭니다.