0

文字列を 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)
4

6 に答える 6

2

数字ではなく日付/時刻のようです

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
于 2012-09-14T07:33:22.723 に答える
2

longその数は、Java で表すには大きすぎます。可能な最大値long9223372036854775807Lです。BigDecimal代わりに使用してください。

また、最後の文字は文字 ですB。これはどの数字でも無効です。

于 2012-09-14T07:26:10.297 に答える
0

Long の Javadoc によると、は2^63 - 1Long.MAX_Valueと定義されています。指定した値が指定された値よりも大きいため、NumberFormatExceptionがスローされています。

于 2012-09-14T07:32:28.730 に答える
0

Why dont you go for BigInteger class

于 2012-09-14T07:28:45.283 に答える
0
20120828000040464018674B

長いリテラルではない (末尾の B)

于 2012-09-14T07:27:14.330 に答える
0
System.out.println(Long.MAX_VALUE);
// prints 9223372036854775807
// yours' 20120828000040464018674B
于 2012-09-14T07:27:50.807 に答える