文字列を Long に変換しようとするとエラーが発生します。
Long l = Long.parseLong(str);
例外は次のとおりです。
java.lang.NumberFormatException: For input string: "20120828000040464018674B"
at java.lang.Long.parseLong(Long.java:415)
at java.lang.Long.parseLong(Long.java:461)
文字列を Long に変換しようとするとエラーが発生します。
Long l = Long.parseLong(str);
例外は次のとおりです。
java.lang.NumberFormatException: For input string: "20120828000040464018674B"
at java.lang.Long.parseLong(Long.java:415)
at java.lang.Long.parseLong(Long.java:461)
数字ではなく日付/時刻のようです
String dt = "20120828000040464018674B";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
Date date = sdf.parse(dt.substring(0, 17));
int nanos = Integer.parseInt(dt.substring(17, 17 + 6));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
System.out.printf("%s%06d%n", sdf2.format(date), nanos);
プリント
2012/08/28 00:00:40.464018674
long
その数は、Java で表すには大きすぎます。可能な最大値long
は9223372036854775807L
です。BigDecimal
代わりに使用してください。
また、最後の文字は文字 ですB
。これはどの数字でも無効です。
Long の Javadoc によると、は2^63 - 1Long.MAX_Value
と定義されています。指定した値が指定された値よりも大きいため、NumberFormatExceptionがスローされています。
Why dont you go for BigInteger class
20120828000040464018674B
長いリテラルではない (末尾の B)
System.out.println(Long.MAX_VALUE);
// prints 9223372036854775807
// yours' 20120828000040464018674B