在Java中将long转换为int

时间:2015-02-25 15:21:57

标签: java casting timestamp epoch

我使用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

所以问题在于施法价值不匹配。我想要的是让第一个输出与整数相同。

你能提供一些背景知识吗?

3 个答案:

答案 0 :(得分:1)

您的演员语法不正确。您还需要注意,long可能比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;
}

尝试类似这样的事情......

答案 1 :(得分:0)

你可以写一些诸如

之类的东西
try{

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

答案 2 :(得分:0)

Java SE 8

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

演示:

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