C# 中的等效 java 强制转换
本文关键字:转换 java | 更新日期: 2023-09-27 18:32:25
我需要帮助来迁移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 相同。
您需要
使用 Int64(长)。Int32 不够大,无法保存该值。
Int32.MaxValue = 2,147,483,647
Int64.MaxValue = 9,223,372,036,854,775,808
http://forums.asp.net/post/1203789.aspx
TotalMilliseconds 是双精度,而不是 Int32。可能是你的问题
要模仿溢出行为,您可以使用uncheck关键字执行某些操作,但是我对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