踩坑系列《十三》解決時間戳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位會報異常,有知道的大佬,可以分享下,蟹蟹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM