在 .NET 中将小时数转换为分钟数

Converting Hours to Minutes in .NET

我有一个时间跨度 2h 30min 22sec。但我需要以 150min 22sec 格式限制到 UI 的时间。怎么可能?有可用的内置函数或格式吗?

由于您需要总分钟数,因此可以使用 MultiBinding

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}min {1}sec">
            <Binding Path="YourTimeSpan.TotalMinutes" Converter="{StaticResource ObjectToIntegerConverter}"/>
            <Binding Path="YourTimeSpan.Seconds"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

编辑:

正如评论中所指出的,您必须将 TotalMinutes 转换为整数,为此,您可以使用 IValueConverter.

public class ObjectToIntegerConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return System.Convert.ToInt32(value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

不要忘记在您的 Resources 中声明它,例如:

<Window
    ...
    xmlns:Converters="clr-namespace:Your.Converters.Namespace">

    <Window.Resources>
        <Converters:ObjectToIntegerConverter x:Key="ObjectToIntegerConverter"/>
    </Window.Resources>

自己制作:

public struct MyTimeSpan
{
  private readonly TimeSpan _data;

  public MyTimeSpan(TimeSpan data)
  {
    _data = data;
  }

  public override string ToString()
  {
    return string.Format("{0:f0}min {1}sec", _data.TotalMinutes, _data.Seconds);
  }
}

我在 XAML 方面不熟悉,但您可以将 TimeSpan 格式设置为;

var ts = new TimeSpan(2, 30, 22);

Console.WriteLine(string.Format("{0}min {1}sec", 
                                (int)ts.TotalMinutes,
                                ts.Seconds));

生成

150min 22sec