在 Java 中将 long 转换为 int

Converting long to int in Java

我正在使用 System.currentTimeMillis() 获取纪元以来的秒数。 这是一个例子。

 long enable_beacon_timestamp = System.currentTimeMillis()/1000;
 println(enable_beacon_timestamp);
 println(int(enable_beacon_timestamp));      
 enable_beacon(int(enable_beacon_timestamp));

并且输出给出:

 >>1424876956
 >>1424876928

所以问题是转换值不匹配。我想要的是让第一个输出与整数相同。

你能提供一些发生这种情况的背景吗?

您的转换语法不正确。您还需要注意 longs 可能比 int.

的最大值大得多
int y;
if ( enable_beacon_timestamp > (long)Integer.MAX_VALUE ) {
    // long is too big to convert, throw an exception or something useful
}
else {
    y = (int)enable_beacon_timestamp;
}

也许试试这样的东西...

你可以这样写

try{

   int castedValue = ( enable_beacon_timestamp < (long)Integer.MAX_VALUE )?(int)enable_beacon_timestamp : -1;
   }
catch (Exception e)
{
   System.out.println(e.getMessage());
}

Java 东南 8

  1. 为避免自己进行计算,您可以使用 TimeUnit#convert
  2. 为了避免由于溢出而得到不希望的结果,您可以使用 Math.toIntExact 如果值溢出 int.
  3. 则抛出异常

演示:

import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(String[] args) {
        long seconds = TimeUnit.SECONDS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
        System.out.println(seconds);

        try {
            int secondInt = Math.toIntExact(seconds);
            System.out.println(secondInt);
            // ...
        } catch (ArithmeticException e) {
            System.out.println("Encountered error while casting.");
        }
    }
}

输出:

1621358400
1621358400