2012-12-13 122 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; 
    }