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

时间:2015-07-29 06:59:30

标签: c# .net xaml time string-formatting

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

3 个答案:

答案 0 :(得分:4)

根据您需要的总分钟数,您可以使用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>

答案 1 :(得分:3)

我对XAML方面不熟悉,但您可以将TimeSpan格式化为

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

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

产生

150min 22sec

答案 2 :(得分:1)

自己制作:

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