티스토리 뷰

728x90
반응형

JDK 6 이후, Timezone.setDefault()

Timezone.setDefault(Timzone timezone) 은 메소드 명에서 유추할 수 있듯이 기본 Timezone 값을 설정하는 메소드이다.

Timezone.getDefault() // 기본 Timezone 값 가져오기

먼저 핵심부터 이야기하면, JDK 6 이전에는 defaultTimzone 이 스레드 로컬 변수에 저장되었다.

하지만 JDK 6 이후로는 defaultTimezone 이 VM 전체를 변경한다고 한다.

내 경우에는 JDK 6 이전의 형태로만 알고 있었기 때문에,

Timezone 설정을 아래와 같이, 별도의 시간 관련 메소드 내에서 Timezone.setDefault(Timzone timezone) 을 사용하여 Timezone 설정을 간략화 해두었었다.

( Calendar 객체를 가져오거나 SimpleDateFormat 에 timezone 을 설정하지 않고 )

 public boolean checkDate() {
  TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
   Calendar calendar = Calendar.getInstance();
   SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
 }

하지만 문제가 발생한 것이, 다른 시간대를 가져와서 비교를 하는 로직이 있었는데

( 위의 메소드가 사용되는 곳과 전혀 다른 곳 - 다른 Activity, 다른 프로세스 )

 Calendar.getInstance("Asia/Seoul");

위 처럼 Asia/Seoul 의 Timezone 을 명시하여도 GMT 시간으로 가져오는 문제가 발생하였다.

이것 때문에 한참 골머리 썪었었는데, 다행히도 참고한 글을 발견하고 해결하였다.

References

https://codeday.me/ko/qa/20190508/489138.html



반응형

'프로그래밍 > Java' 카테고리의 다른 글

[Java] String.contains() with empty String, return true  (1) 2019.10.03
[Java] Type Safety : unchecked cast  (0) 2019.01.29
[Java] :: ( 더블콜론 )  (0) 2018.12.12
[Java] Iterator  (0) 2018.12.12
[Java] parseInt() 와 intValue() 의 차이  (0) 2017.11.01
공지사항
최근에 올라온 글