如何从C#中的TimeSpan中删除毫秒?

时间:2016-03-02 14:52:38

标签: c#

我是c#的新手并使用Windows窗体。此代码的结果是:01:38:07.0093844。任何人都知道如何从结果中删除毫秒部分(0093844)(ts)我希望结果如下所示:01:38:07(H:mm:ss)没有毫秒。

请帮忙。谢谢你

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

4 个答案:

答案 0 :(得分:10)

创建扩展方法:

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

答案 1 :(得分:3)

对象包含的内容和屏幕上的内容是不同的问题,请勿混合使用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'")

答案 2 :(得分:1)

您可以按如下方式格式化时间:

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

答案 3 :(得分:1)

你可以通过一个除法和乘以每秒刻度的数量来实现:

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

TimeSpan内部只是"简单地"一些Ticks。通过整数除法和整数乘法,你可以'#34; round"它们。