踩坑系列《十三》解決時間戳long轉換int溢位(即轉換值為負數)
阿新 • • 發佈:2021-07-12
最近業務需求,需要使用到 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位會報異常,有知道的大佬,可以分享下,蟹蟹