我需要帮助来迁移java方法:
(int)System.currentTimeMillis(); //result -186983989 (java) return diferent values
但是在C#中总是返回相同的值:
DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan span = DateTime.UtcNow - Jan1st1970;
Int32 resultado = (int)span.TotalMilliseconds; //result is always -2147483648 and i need same as java
在调试快速监视器中显示正确的值很少见,但在执行中resultado
总是-2147483648
我需要这个-186983989结果,与java相同。
答案 0 :(得分:3)
你想要使用Int64(长)。 Int32不足以容纳该值。
Int32.MaxValue = 2,147,483,647
Int64.MaxValue = 9,223,372,036,854,775,808
答案 1 :(得分:2)
TotalMilliseconds是一个double,而不是Int32。可能是你的问题
答案 2 :(得分:0)
要模仿溢出行为,你可以使用unchecked关键字做一些事情,但我不太了解Java知道这是否正确
DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan span = DateTime.UtcNow - Jan1st1970;
unchecked{
int mm = Int32.MaxValue;
mm += (int)(span.TotalMilliseconds % Int32.MaxValue);
Console.WriteLine(mm);
}
作为旁边-2147483648 = Int32.MinValue