반응형

로컬 시간과 UTC 시간, 두가지 시간 모두 필요해서

localtime 함수와 gmtime 함수를 사용할 일이 있었다.


멋모르고 사용하다가 삽질할 뻔했지만 

다행이도 금방 눈에 띄였기에.




이렇게 작성해서 실행해보면 localtime과 gmtime 출력 결과가 똑같이 출력된다.

비정상 출력이다. (system timezone이 한국이라면 9시간 차이가 나야 정상이다.)


곰곰히 생각하다가 소스를 처음부터 다시 살펴봤더니

localtime이나 gmtime이 시간을 똑같이 출력하는 건 차치하더라도


일단 localtime과 gmtime의 리턴값은 struct tm* 변수를 리턴한다.

하지만 우리는 tm 구조체 포인터 변수를 리턴값으로 받으면서도 delete를 한적이 없다.

하라는 설명을 본적도 없었고.


어떻게 가능하지 싶다가 아차! 싶었던 것이 static 전역 변수썼을 것이고 

왜인지 localtime과 gmtime이 같은 전역 변수를 사용할 것 같아 주소를 출력해봤더니.. 역시나..



올바르게 사용하려면 메모리 copy를 하던지

아니면 그냥 순차적으로 사용하던지. :3

ㅋㅋㅋㅋ




사실.. localtime과 gmtime 사용법을 설명한 페이지( http://www.cplusplus.com/localtime ) 의 

return value항목에서는 내부 객체를 가르키는 포인터의 값과 유효성이 

localtime함수나 gmtime함수를 호출하면서 변경될 수있다고 적어놨다....

좀 꼼꼼히 읽어 볼껄.........


* OSX > XCODE에서는 이런 현상이 발생되지않는다.

* Visual Studio 2013과 우분투에서는 위의 설명과 같다.

* 참고 사이트

http://www.cplusplus.com/localtime

http://www.cplusplus.com/reference/ctime/gmtime/



반응형