Programing

TimeSpan ToString 형식

crosscheck 2020. 9. 3. 07:36
반응형

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에 도입 된 문자열 보간은 다른 방법보다 훨씬 더 명확하게 만듭니다.

참고 URL : https://stackoverflow.com/questions/11077711/timespan-tostring-format

반응형