29

.Netのタイムスパンを使用して計算を行っていますが、合計が負のタイムスパンになる場合があります。結果を表示するときに、負のインジケーターを含めるようにフォーマットするのに問題があります。

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

しかし、私はフォーマット文字列だけを使用して同じことを達成したいと思っていました。

4

7 に答える 7

15

TimeSpan.ToString(...)で.Net Reflectorを使用しましたが、カスタム形式で負のプレフィックスをサポートしているようには見えません。そのため、取得に関しては運が悪いと思います。上記のようにあなたのために働くために。:(

于 2010-07-11T17:33:00.637 に答える
10

あなたはそのコードに固執しているようですが、そうであれば、これは拡張メソッドを書くのに最適な時期のようです。そうすれば、コードをより明確にすることができ、そのコードを複数の場所で繰り返す必要がなくなります。何かのようなもの:

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()
于 2010-07-11T18:02:05.467 に答える
2

私はウィルに同意します。MSDNとReflectorはどちらも、運が悪いことを示しています。自分が持っているものを使用するか、独自のIFormatProviderを作成するか、「g」のようなタイムスパンの標準形式の1つを使用するのが最善です。

于 2010-07-11T17:45:52.807 に答える
2

私はこの醜いコードを使用しています:

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

それが役に立てば幸い!

于 2013-09-24T13:28:51.200 に答える
1

標準形式「c」は負の符号を提供しますが、タイムスパンのすべての部分が含まれます。

    Dim ts As New TimeSpan(-10, 1, 2)
    Debug.WriteLine(ts.ToString("c"))
于 2010-07-12T11:29:44.610 に答える
0

@ ho1の回答に基づいて、拡張メソッドを作成しました。最近は少し使いやすいかもしれません。

public static class TimeSpanUtil
{
    public static string HoursAndMinutes(this TimeSpan ts) 
    {
        return (ts < TimeSpan.Zero ? "-" : "") + ts.ToString("hh:mm");     
    }        
}
于 2014-07-15T08:12:04.420 に答える
0

さまざまなアプローチをテストした後、これが私がしたことです:

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
于 2020-12-03T18:56:22.600 に答える