0

I have a function which returns seconds since epoch:

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

It outputs, for example: 1373689200.79987 but for the purposes of my application, I need it to output one more decimal place digit - for example 1373689200.799873. How is this possible?

Thanks!

4

4 回答 4

6

尝试使用

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

然后您可以使用格式字符串。有关格式信息,请参阅此 MSDN 文章

编辑1:

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

尝试使用:

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

强制保留 6 位小数。

编辑2:

您可以查找自定义数字格式字符串标准数字格式字符串,以找出执行此操作的最佳方法。

一种方法是使用F而不是N(两者都是标准数字格式字符串)。N将逗号分隔数千个F不会。

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

编辑3:

正如@sa_ddam213 在他的回答中指出的那样,标准ToString()方法有一个接受格式化参数的重载。MSDN 在这里记录了它Double您可以清楚地看到它接受标准数字格式字符串自定义数字格式字符串,因此@sa_daam213 的答案也非常有效,并且与您的原始代码非常相似,但不像在我的编辑N6中那样使用2以上。F6

于 2013-07-15T03:09:25.683 回答
4

you can use timestamp.ToString("0.000000")

if you need result without rounding value

return t.TotalSeconds.ToString("F0")+"." +t.ToString("ffffff");
于 2013-07-15T03:13:25.027 回答
3

You should be able to add N6 (6 decimal places) to your ToString()

Example:

public static string getEpochSeconds()
{
    TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
    var timestamp = t.TotalSeconds;
    return timestamp.ToString("N6");
}
于 2013-07-15T03:14:07.653 回答
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;
    }

我也添加了输出作为评论。希望这可以帮助。

于 2013-07-15T04:03:41.270 回答