我有java程序将String
转换为int
,但当我转换{{1}时,String的范围是190520141618013381
(在int
的范围之上) } int
被抛出
java.lang.NumberFormatException:
我的问题是编译器应该抛出StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(format.format(date));
stringBuffer.append(demandCount);
int test_int = Integer.parseInt(stringBuffer.toString()); // exception has been fixed by putting
//long abc_i = Long.parseLong(abc);
log.info("test_int: "+test_int);
(如果API中有此异常)而不是NumberOutOfRangException
,则数字(java.lang.NumberFormatException:
)的格式是正确的。
答案 0 :(得分:2)
字符串190520141618013381
超出了int
的范围,但它也与int
的可接受格式不匹配,因为它太长了。
编译器不会抛出此错误,它会在运行时抛出。
我认为遵守此方法的文档是正确的。
BTW不要使用StringBuffer,十年前它被StringBuilder取代了。恕我直言,将日期存储为整数并不是一个好主意。
获得包含毫秒时间的唯一ID更有效的方法是做这样的事情。
private static final AtomicLong TS_COUNTER = new AtomicLong();
public static long nextTimeStamp() {
long time = System.currentTimeMillis() * 1000;
long curr = TS_COUNTER.get();
if (curr < time && TS_COUNTER.compareAndSet(curr, time))
return time;
return TS_COUNTER.incrementAndGet();
}
这将具有毫秒时间* 1000加上唯一ID。如果你的平均每秒不到一百万,那么这种方法很好。