【问题标题】:Is there a more elegant way of removing seconds from a TimeSpan?有没有更优雅的方法从 TimeSpan 中删除秒?
【发布时间】:2021-11-08 10:27:32
【问题描述】:

假设我有一个等于 07:10:30 的 TimeSpan,我可以使用以下代码从中删除秒数:

myTimeSpan = new TimeSpan(myTimeSpan.Hours, myTimeSpan.Minutes, 0)

这是合适的,还是有更优雅的方式来实现这一点?

【问题讨论】:

  • 我认为这是非常好的方法。
  • 您还想从TimeSpan 值中删除Days 组件吗?因为这就是你当前的代码所做的。

标签: c# timespan


【解决方案1】:

我会提议

TimeSpan.FromMinutes((long) myTimeSpan.TotalMinutes)

这会删除任何小于一分钟的时间组件,同时保留较大的时间组件,例如天、小时等。如果您想四舍五入到最接近的分钟而不是截断,请使用 Math.Round

【讨论】:

  • 算术溢出是否安全(double => int)?
  • @TheodorZoulias 好吧it covers you for 4086 years 所以我认为你会很安全
  • @Charlieface 所以不推荐从Khufu's pyramid 的盛大开幕到现在的几分钟。 ?
  • @Charlieface 一个解决方案应该支持TimeSpan的域的极值。
【解决方案2】:

创建一个向零舍入到最接近的TimeSpan.TicksPerMinute 的扩展方法。

public static class TimeSpanExtensions
{
    public static TimeSpan WithoutSeconds(this TimeSpan ts)
    {
        const long ps = TimeSpan.TicksPerMinute;
        long roundedTicks = ts.Ticks / ps * ps;
        return new TimeSpan(roundedTicks);
    }
}

参考:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.ticks?view=net-5.0#System_TimeSpan_Ticks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多