Timestamp.UTCNow不是最新的

时间:2016-05-08 22:56:46

标签: c# datetime timestamp

我创建了一个获取Unix时间戳的简单类。第一次调用它时会返回时间戳,但在此之后它总是返回第一次返回的相同值,就像它已被缓存一样。

这里发生了什么?

using System;
using System.Collections;

public class Timestamp {    
    public static float now {
        get {
            return (float)(DateTime.UtcNow.Subtract(new DateTime (1970, 1, 1))).TotalSeconds;
        }
    }    
}

Timestamp.now始终返回相同的值

编辑:

using UnityEngine;
using System;
using System.Collections;


    public static float now {
        get {
            Debug.Log(DateTime.UtcNow); // 1
            Debug.Log(DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1))); // 2
            float ts = (float)(DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1))).TotalSeconds;
            Debug.Log(ts.ToString("F")); // 3
            return ts;
        }
    }

}

1)打印5/8/2016 11:44:57 PM第一次通话,以及5/8/2016 11:45:05 PM第二次通话,所以它是最新的

2)在第一次通话时打印16929.23:44:57.2918073,在第二次通话时打印16929.23:45:05.9735794,所以它是最新的

3)始终打印1462751000.00

2 个答案:

答案 0 :(得分:0)

试试这个

public static int now {
        get {
            return (int)(DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1))).TotalSeconds;
        }
    }

答案 1 :(得分:0)

问题(正如@PetSerAl的评论中所指出的)float的精度太低了。

观察:

var nowAsDouble = (DateTime.UtcNow.Subtract(new DateTime (1970, 1, 1))).TotalSeconds;
var nowAsFloat = (float)nowAsDouble;

Console.WriteLine("double: " + nowAsDouble.ToString("0.0"));
Console.WriteLine("float:  " + nowAsFloat.ToString("0.0"));

输出:

double: 1462751469.2  
float:  1462751000.0

如果你多次运行,你会看到双版本每次都在变化,浮点值总是被截断。

您需要使用double值而不是float