Error
The literal of type int is out of range
long이기 때문에 왠만한 숫자값은 다 받아서 처리가 될 수 있을 거라 생각을 했는데 out of range 에러가 발생하였다.
이상이 없는 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package timeConvert; import java.text.SimpleDateFormat; import java.util.Date; public class main { public static void main(String[] args) { long time = System.currentTimeMillis(); long time2 = System.currentTimeMillis() / 1000; long time3 = time2 * 1000; System.out.println(time + " " + time2 + " " + time3); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str = sdf.format(new Date(time)); String str2 = sdf.format(new Date(time3)); System.out.println(str + " " + str2); } } | cs |
여기까지는 정상적으로 아래와 같은 출력을 수행한다
1504655045240 1504655045 1504655045000
2017-09-06 08:44:05 2017-09-06 08:44:05
문제는 중간에 있는 값을 직접 넣어서 할 경우 발생하게 된다.
이상이 있는 부분
1 2 3 4 5 6 7 8 9 10 11 | public static void main(String[] args) { long time = 1504655045; long time2 = 1504655045 * 1000; System.out.println(time + " " + time2); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str = sdf.format(new Date(time)); System.out.println(str); } | cs |
상식적으로는 이상이 없어 보인다. 1504655045 값에 1000을 곱하면, 1504655045000이 되어야 하는 간단한 부분인데
아래와 같은 결과가 나온다
1504655045 1416491400
1970-01-18 06:57:35
오히려 값이 줄어드는 현상이 발생했다. 그럼 이번에는 1504655045000 값을 직접 입력해보면 어떻게 될까?
long time2 = 1504655045000;
이렇게 값을 넣으려고 하니, 결국 제목과 같은 "The literal 1504655045000 of type int is out of range" 에러 메세지가 출력된다.
대충 내용을 읽어보니, 뒤에 입력한 숫자는 int로 인식을 하는 것 같고, int값의 범위를 벗어나서 에러가 출력이 되는 것 같다.
그럼, 간단히 말해서 이 문제는 int를 long형으로 인식시켜주면 문제가 해결이 된다는 셈이다.
long time2 = (long)1504655045000;
이렇게 하면 될 것이라 생각했는데 여전히 에러가 발생한다
out of range 해결법 1
1 2 3 4 5 6 7 8 9 10 11 | public static void main(String[] args) { long time = 1504655045; long time2 = Long.parseLong(Long.toString(time) + "000"); System.out.println(time + " " + time2); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str = sdf.format(new Date(time2)); System.out.println(str); } | cs |
무식한 방법으로, 현재의 값을 String으로 바꾸고 값 마지막에 000이라는 문자를 더한다음 다시 Long 형으로 바꿔주니
결과는 정상적으로 출력이 되었다. 그러나 이건 너무 무식한 방법이니 패스
out of range 해결법 2
1 2 3 4 5 6 7 8 9 10 11 | public static void main(String[] args) { long time = 1504655045; long time2 = 1504655045000L; System.out.println(time + " " + time2); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str = sdf.format(new Date(time2)); System.out.println(str); } | cs |
int 값이 아니라 이 값은 Long 형이다라는 것을 명시적으로 알려주는 방식으로 마지막에 L값을 붙인다.
이렇게 하면 int is out of range 에러는 발생하지 않는다.
'Stackoverflow > Java' 카테고리의 다른 글
mysql connector의 버전에 따른, 톰캣 오류 (0) | 2018.05.08 |
---|---|
스프링(Spring)에서 글자가 깨질 경우 (0) | 2017.12.15 |
스프링(Spring)에서 Error creating bean with name 에러 발생시 (0) | 2017.12.15 |
JSON 파싱시, Unexpected character (t) at position 에러 (0) | 2017.11.10 |
Unsupported major.minor version 52.0 (0) | 2017.09.01 |