1. 程式人生 > 其它 >踩坑系列《十三》解決時間戳long轉換int溢位(即轉換值為負數)

踩坑系列《十三》解決時間戳long轉換int溢位(即轉換值為負數)

最近業務需求,需要使用到 int 型別的時間戳,所以在使用時間戳的時候,由於java自帶的 System.currentTimeMillis() 返回的型別是long,強行轉換一波的話,是會出現資料溢位的情況。
看例子

long longTimeStamp = System.currentTimeMillis();
int intTimeStamp = (int) (longTimeStamp);

結果展示

-1890658190

這是因為int變數的儲存空間為2個位元組,而long的儲存空間為4個位元組,當long的數值過大,會出現資料溢位的情況。

解決辦法:
1、如果是跟我一樣,有用到時間戳的話,並且時間戳的要求是秒的話,直接將 結果值/1000

就行,簡單明瞭

int intTimeStamp = (int) (longTimeStamp / 1000);  // 結果為 1625902260即正常時間戳(秒單位)

2、如果是其他數值的情況(其實一般情況下,強轉就可以解決了),但也可通過以下方法解決

long longValue = 1234567890;
int intValue = new Long(longValue).intValue();

long longValue = 1234567890;
int intValue = Interger.parseInt(String.valueOf(longValue));

至於毫秒的情況,目前本人未想出解決方案,原因是 int型別能夠接受的範圍是 10位數,超過10位會報異常,有知道的大佬,可以分享下,蟹蟹