如何将小数位添加到TimeSpan对象的totalseconds?

时间:2013-07-15 03:02:21

标签: c# datetime

我有一个从epoch开始返回秒的函数:

public static string getEpochSeconds()
{
   TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
   var timestamp = t.TotalSeconds;
   return timestamp.ToString();
}

它输出,例如: 1373689200.79987 但是出于我的应用目的,我需要输出一个小数位数 - 例如 1373689200.799873 。这怎么可能?

谢谢!

4 个答案:

答案 0 :(得分:6)

尝试使用

return String.Format("{0}", timestamp.TotalSeconds);

然后你可以使用格式字符串。有关格式信息,请参阅this MSDN article

修改1:

感谢@MortenMertner提供正确的格式。

尝试使用:

return String.Format("{0:N6}", timestamp.TotalSeconds);

强制小数点后6位。

编辑2:

您可以查找custom numeric format stringsstandard numeric format strings以找出执行此操作的最佳方式。

一种方法是使用F代替N(两者都是standard numeric format strings)。 N将逗号分隔F不会的数千个。

return String.Format("{0:F6}", timestamp.TotalSeconds);

编辑3:

正如@ sa_ddam213在他的回答中指出的那样,标准ToString()方法有一个接受格式化参数的重载。对于Double MSDN documents it here,您可以清楚地看到它接受standard numeric format stringcustom numeric format string,因此@ sa_daam213的答案也非常有效,与原始代码非常相似但不是N6使用F6,就像我上面的编辑2 一样。

答案 1 :(得分:4)

您可以使用timestamp.ToString("0.000000")

如果您需要没有舍入值的结果

return t.TotalSeconds.ToString("F0")+"." +t.ToString("ffffff");

答案 2 :(得分:3)

您应该可以在N6

中添加ToString()(小数点后6位)

示例:

public static string getEpochSeconds()
{
    TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
    var timestamp = t.TotalSeconds;
    return timestamp.ToString("N6");
}

答案 3 :(得分:1)

如果最后一位数字不重要,您可以使用ToString("N6")(在这种情况下,最后只添加0)。但是如果你想要真正的最后一位数,由于某种奇怪的方式将.NET转换成双字符串,你可能需要以下内容。

    public static string getEpochSeconds()
    {
        TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
        //t {15901.03:57:53.6052183}    System.TimeSpan
        var timestamp1 = t.TotalSeconds;
        //timestamp1    1373860673.6052184  double
        var tstring1 = timestamp1.ToString("N6");
        //tstring1  "1,373,860,673.605220"  string
        var timestamp = (long)(t.TotalSeconds * 1000000);
        //timestamp 1373860673605218    long
        string tstring =timestamp.ToString();
        //tstring   "1373860673605218"  string
        tstring = tstring.Substring(0, tstring.Length - 6) + "." + tstring.Substring(tstring.Length - 6);
        //tstring   "1373860673.605218" string
        return tstring;
    }

我已将输出添加为评论。希望这会有所帮助。