4

我需要帮助来迁移 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

很少见,因为在调试 quickwatch 时显示正确的值,但在执行resultado中总是 -2147483648

我需要这个 -186983989 结果,和 java 一样。

4

3 回答 3

3

您将需要使用 Int64(长)。Int32 不足以容纳该值。

Int32.MaxValue = 2,147,483,647
Int64.MaxValue = 9,223,372,036,854,775,808

http://forums.asp.net/post/1203789.aspx

于 2012-04-27T20:25:31.510 回答
2

TotalMilliseconds 是双精度,而不是 Int32。可能是你的问题

于 2012-04-27T20:23:31.790 回答
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

于 2012-04-27T20:53:50.637 回答