2012-12-13 161 views
1

我有一個變量獲取當前時間並存儲很長時間。但我必須將其轉換爲int,因爲這是要求。所以我在做的是轉換val(int)並存儲在int中。鑄造長到int

Val = 1355399741522 (long) 
Int Val = -1809346991 (after casting to int) 

After Casting from int to long -> Val = -1809346991 //TESTED 

現在我的問題是,如果我想再次將此int轉換回長,肯定它不會爲我工作。 我已經測試過了。但我想要這個替代解決方案。

注 - 我不想存儲很長時間。作爲它的要求。而我使用下面的函數長轉換時間

public static String convertToTime(final long date) { 
     String time = null; 
     final SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("HH"); 
     final SimpleDateFormat bartDateFormat2 = new SimpleDateFormat("mm"); 
     final Date fomDat = new Date(date); 
     final int hour = Integer.parseInt(bartDateFormat1.format(fomDat)); 
     final int min = Integer.parseInt(bartDateFormat2.format(fomDat)); 
     time = pad(hour) + ":" + pad(min); 
     return time; 
    } 

如果任何人有任何想法,請您指導我,或提供任何替代。

+0

拆分'長'並將其存儲在兩個'int's和concat他們恢復? :|不知道你在努力達到什麼... – amit

+1

'1355399741522'不能存儲在一個int,因爲它太大(它大於Integer.MAX_VALUE)。你試圖達到的目標並不明確...... – assylias

+5

你的號碼太大而無法存儲在int中。它似乎是從這個時代(1970年)算起的毫秒數。如果你除以1000,你會得到自1970年以來的秒數,這可以存儲在一個int(至少到2038年,它將溢出)。秒分辨率適合你嗎? – nos

回答

2

當時間存儲爲int它通常以秒爲單位,因爲毫秒不適合。如果你這樣做

long timeInMs = 1355399741522L; 
int timeInSec = (int) (timeInMs/1000); // now 1355399741 
long timeInMs2 = timeInSec * 1000L; // now 1355399741000L 
+0

謝謝....其工作... – Scorpion

+2

獲得所有里程,你可以出這個解決方案;它只能工作25年左右。 :) – cHao

+0

@cHao,現在已經夠25年了。謝謝你的信息。它真的幫助... – Scorpion

2

如果你有一個long包含的值大於Integer.MAX_VALUE大於或小於Integer.MIN_VALUE,你將其轉換爲int,然後回long,你就不會再取回原來的值。

如果您有「要求」這樣做,那麼您的要求是不可實施的。你試圖做的是數學上的不可能性。

(你也應該考慮到,你誤會要求的可能性...)

1

可以長轉換爲字符串,並創建一個整數(字符串)對象。 ,但由於Long.MAX_VALUE(2^63-1)遠遠大於Integer.MAX_VALUE(2^31 - 1),所以如果長變量的長度超過最大長度整數類型。

+0

但在妥協/溢出期間會發生什麼? – Thalatta

0
public static String convertToTime(final long date) { 
     String time = null; 
     final SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("H:m"); 
     time = bartDateFormat1.format(date); 
     return time; 
    }