source

음의 시간 범위 형식 지정

lovecheck 2023. 7. 16. 13:41
반응형

음의 시간 범위 형식 지정

타임스팬과 함께 수학을 하고 있습니다.네트, 그리고 때때로 그 합계는 마이너스 타임스팬을 초래합니다.결과를 표시할 때 음의 표시기를 포함하도록 포맷하는 데 문제가 있습니다.

Dim ts as New Timespan(-10,0,0)

ts.ToString()

그러면 "-10:00:00"이 표시되는데, 이는 좋지만 초를 보여주고 싶지 않아서 시도해 보았습니다.

ts.ToString("hh\:mm")

그러면 "10:00"이 반환되고 문제의 핵심인 "-"가 전면에서 떨어집니다.현재 솔루션은 다음과 같습니다.

If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm")

형식 문자열만 사용하여 동일한 작업을 수행할 수 있기를 희망했습니다.

써봤습니다.시간 범위의 Net Reflector입니다.ToString(...) 그리고 그것은 정말로 사용자 지정 형식에서 어떤 형태의 부정적인 접두사도 지원하지 않는 것처럼 보입니다. 그래서 위와 같이 당신에게 그것이 작동하도록 하는 것에 관해서는 당신은 운이 좋지 않다고 생각합니다.

코드에 집착하는 것처럼 보이지만, 그렇다면 지금은 코드를 더 명확하게 만들 수 있고 여러 곳에서 코드를 반복할 필요가 없는 익스텐션 방법을 작성하기에 좋은 시기인 것 같습니다.

Module Extensions
    <System.Runtime.CompilerServices.Extension()> _
    Public Function HoursAndMinutes(ByVal ts As TimeSpan) As String
        Return If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm")
    End Function
End Module

그런 다음 이렇게 부를 수 있습니다.

ts.HoursAndMinutes()

윌의 의견에 동의합니다 MSDN과 리플렉터는 모두 당신이 운이 없다는 것을 나타냅니다현재 보유한 것을 사용하거나, 직접 IFormatProvider를 작성하거나, "g"와 같은 표준 시간 범위 형식 중 하나를 사용하는 것이 최선입니다.

나는 이 도망 코드를 사용하고 있습니다.

if (timeDiff.TotalSeconds < 0)
           {
               timeDiff = timeDiff.Negate();
               TimeChangeTb.Text = string.Format("-{0:D2}:{1:D2}:{2:D2}",
               timeDiff.Hours,
               timeDiff.Minutes,
               timeDiff.Seconds);
           }
           else
           {
               TimeChangeTb.Text = string.Format("{0:D2}:{1:D2}:{2:D2}",
               timeDiff.Hours,
               timeDiff.Minutes,
               timeDiff.Seconds);
           }

도움이 되길 바랍니다!

표준 형식 "c"는 음수 기호를 제공하지만 시간 범위의 모든 부분을 포함합니다.

    Dim ts As New TimeSpan(-10, 1, 2)
    Debug.WriteLine(ts.ToString("c"))

@ho1 답변을 기반으로 확장 방법을 구축했습니다.요즘은 좀 더 사용하기 쉬울 수도 있습니다.

public static class TimeSpanUtil
{
    public static string HoursAndMinutes(this TimeSpan ts) 
    {
        return (ts < TimeSpan.Zero ? "-" : "") + ts.ToString("hh:mm");     
    }        
}

다양한 접근 방식을 테스트한 후 다음과 같이 수행했습니다.

Public Module TimeExtensions
    <Extension>
    Public Function ToHourMinute(ByVal time As TimeSpan) As String
        Return $"{If(time < TimeSpan.Zero, "-", "")}{time:hh\:mm}"
    End Function
End Module

언급URL : https://stackoverflow.com/questions/3223902/formatting-a-negative-timespan

반응형