【问题标题】:How can I remove Milliseconds from the TimeSpan in C#? [duplicate]如何从 C# 中的 TimeSpan 中删除毫秒? [复制]
【发布时间】:2016-06-15 12:07:43
【问题描述】:

我是 C# 新手,并且使用 Windows 窗体。这段代码的结果是:01:38:07.0093844。任何人都知道如何从结果 (ts) 中删除毫秒部分 (0093844) 我希望结果看起来像这样:01:38:07 (H:mm:ss) without millisecond 。

请帮忙。谢谢

string OldDateTime = "2016-03-02 13:00:00.597"; //old DateTime
DateTime CurrentDateTime = DateTime.Now;

TimeSpan  ts = CurrentDateTime.Subtract(Convert.ToDateTime(OldDateTime)); //Difference

//result of ts = 01:38:07.0093844

【问题讨论】:

  • “看起来”是什么意思?你的意思是当它转换成字符串时?还是什么?
  • 当你说 ts 的结果是 01:38:07.0093844 时,你的意思是在 ToString() 之后?我的意思是,你想去掉毫秒的时间跨度或将其显示为字符串?
  • 您应该使用格式化它仅用于显示目的,请查看 MSDN 文档页面:msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx
  • 或 DateTime.Now.ToShortTimeString() 或 ShortDateString / 或格式

标签: c#


【解决方案1】:

创建扩展方法:

public static class TimeExtensions
{
    public static TimeSpan StripMilliseconds(this TimeSpan time)
    {
        return new TimeSpan(time.Days, time.Hours, time.Minutes, time.Seconds);
    }
}

用法:

string OldDateTime = "2016-03-02 13:00:00.597"; //old DateTime
DateTime CurrentDateTime = DateTime.Now;

TimeSpan  ts = CurrentDateTime.Subtract(Convert.ToDateTime(OldDateTime)).StripMilliseconds();

要在没有毫秒的情况下格式化(变成字符串),请使用:

string OldDateTime = "2016-03-02 13:00:00.597"; //old DateTime
DateTime CurrentDateTime = DateTime.Now;

TimeSpan  ts = CurrentDateTime.Subtract(Convert.ToDateTime(OldDateTime));
string formatted = ts.ToString(@"dd\.hh\:mm\:ss");

【讨论】:

  • 你假设他知道如何使用扩展方法,添加一个例子它是如何工作的
  • 仍然对我不起作用。 Subtract() 没有名为 StripMillisecond 的函数。无论如何,谢谢你的帮助:)
  • StripMilliseconds 是您需要在代码中声明的扩展方法(参见我的第一个代码 sn-p)。更多关于扩展方法 -- msdn.microsoft.com/en-us/library/bb383977.aspx
【解决方案2】:

你可以像下面这样格式化时间:

string NewDateTime = ts.ToString("yyyy-MM-dd hh:mm:ss");

【讨论】:

  • 那不行,String不是TimeSpan的类型
  • @DonaldJansen 哦,我的错,快速输入。谢谢你让我知道:)
  • 这不对。他想显示 TimeSpan,而不是 OldDateTime
  • 如果我们想走那条路,格式不是 OP 要求的,知道走哪条路仍然是一个很好的帮助:)
  • @Pikoh 他在他的问题中说“我希望结果看起来像这样:01:38:07 (H:mm:ss) 没有毫秒”。跨度>
【解决方案3】:

您可以将除法和乘法四舍五入乘以每秒的刻度数:

ts = new TimeSpan(ts.Ticks / TimeSpan.TicksPerSecond * TimeSpan.TicksPerSecond);

在内部,TimeSpan 是“简单”的Ticks 的数字。通过进行整数除法和整数乘法,您可以“四舍五入”它们。

【讨论】:

  • @xanatos。我使用了您的代码,但毫秒仍然设置为 00000。知道吗? tnx
【解决方案4】:

对象包含的内容和您想要在屏幕上显示的内容是不同的关注点,请勿混合使用 2。如果您希望将其在屏幕上格式化为小时、分钟、秒,请使用 ToString() 并将其包含在您的格式中。示例:

var forScreen = ts.ToString("hh:mm:ss");

查看MSDN Custom TimeSpan Format Strings 上可用的所有格式选项。


编辑

如前所述,您可以随意制作。这是构建人类可读字符串的 ToString 示例。这些格式化程序旨在构建一个可以显示的字符串,因此您不必实际更改基础数据。这是您的演示逻辑。

dif.ToString("'Elapsed: 'dd' days, 'hh' hours, 'mm' minutes and 'ss' seconds'")

【讨论】:

  • 好的,但是如果结果有几天,这会起作用吗?像 3 天 2h 23mm 12ss
  • @Kate 不,它不会,如果您想要特定格式,请阅读两个文档链接之一,以便您可以自己制作
  • @Kate - 当然,您可以使用ToString 做任何您想做的事情。正如 Sidewinder 所提到的,弄清楚您希望如何向用户显示它,阅读文档并创建自己的格式字符串。
猜你喜欢
  • 1970-01-01
  • 2018-04-06
  • 2017-12-11
  • 2011-07-03
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
相关资源
最近更新 更多