簡體   English   中英

在 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

所以問題是演員價值不匹配。 我想要的是使第一個輸出與整數相同。

你能提供一些背景為什么會發生這種情況嗎?

您的強制轉換語法不正確。 您還需要注意long s 可能比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 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM