C# C中的等价java强制转换#

C# C中的等价java强制转换#,c#,C#,我需要帮助来迁移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 resulta

我需要帮助来迁移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相同。TotalMillistics是双精度的,而不是Int32。可能是您的问题

您需要使用Int64(long)。Int32不够大,无法容纳该值

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

要模拟溢出行为,您可以使用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); 
}

作为旁白,我想知道,每天都有一个名为“userxxxxx”的用户被创建。如何生成此帐户?我猜可能是同一个人有不同的ID?也许把代码改成不依赖整数溢出更有意义我知道这是错误的,但我需要模拟java的函数,我的问题是在C中,它总是返回相同的结果。我需要转换那个大的双精度值的int值。在java system.currentimemillis中,返回的不是int,而是long。您在java中执行的角色转换可能也会丢失一些信息。