【问题标题】:How to format Duration with ToString()?如何用 ToString() 格式化 Duration?
【发布时间】:2018-11-12 15:32:38
【问题描述】:

尝试使用 ToString() 格式化持续时间时,我收到以下消息 'No Overload for method 'ToString()' takes 1 arguments。我在这个herehere 上找到了以前的线程;但是,这些线程适用于可为空的 DateTime,并且都建议使用 myDatetime.Value.ToString(),我在下面的示例中尝试过,但仍然收到相同的消息。

    public System.Windows.Duration? MyDuration { get; set; }

    public string MyDurationString
    {
        get => (MyDuration.HasValue) ? MyDuration.Value.ToString(@"hh\:mm\:ss.fff") : null;
        set => MyDuration = string.IsNullOrEmpty(value) ?
                TimeSpan.Zero : TimeSpan.Parse(value);
    }

【问题讨论】:

  • 这里的Duration 类型是什么?你能提供一个minimal reproducible example 而不仅仅是一个sn-p吗? (构造持续时间然后格式化它会更简单 - 不需要可为空的属性等)
  • 你为什么不用TimeSpan
  • 如果这是一个 Noda Time 持续时间,最好添加 nodatime 标签 - 然后基本上你需要传递一个IFormatProvider
  • @TimSchmelter:如果这一个 Noda Time 问题,答案是“因为 Noda Time 是一个优于 DateTime/TimeSpan/DateTimeOffset 的日期/时间 API”:)
  • 您正在寻找的重载是DateTime 类型,因此只有在您使用它将DateTime 转换为string 时它才会起作用。

标签: c# datetime tostring duration


【解决方案1】:

我不知道这种类型,但 WPF Duration 似乎没有带参数的 ToString。但它有一个属性TimeSpan,你可以使用它:

get => MyDuration.HasTimeSpan ? MyDuration.TimeSpan.ToString("hh':'mm':'ss'.'fff") : null; 

【讨论】:

  • 注意:根据文档,Duration 也可能没有TimeSpan - 明智的做法是先检查HasTimeSpan 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多