我创建了一个获取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
答案 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
。