C#中的等效Java强制类型转换

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

这很少见,因为在调试快速监视中显示正确的值,但在执行中resultado总是-2147483648

我需要与Java相同的结果-186983989。


我想知道,每天我都会看到一个名为“userxxxxx”的用户被创建。如何生成这个账户?我猜可能是同一个人用不同的ID创建的。 - user1108948
也许更明智的做法是修改您的代码,使其不依赖于整数溢出。 - Conrad Frix
3个回答

3

2

TotalMilliseconds是double类型,而不是Int32。可能是你的问题所在。


我知道这样做是错误的,但我需要模仿Java的函数,我的问题是在C#中它总是返回相同的结果。我需要将那个大的double值强制转换为int值。 - user1361817
在Java中,system.currenttimemillis返回的不是int而是long。你在Java中所做的强制转换很可能会丢失一些信息。 - Gaet

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接