이 사람은 지금 좋은 순간을 위해 나를 괴롭혀 왔습니다. 나는 C++로 작성된 프로그램을 작성 중이며 두 개의 다른 서버간에 ISO8601로 인코딩 된 시간을 보낼 수 있어야합니다. 여기서 가장 중요한 것은 Windows 인 것 같습니다.UTC tm *을 현지화 된 tm *으로 변환하는 교차 플랫폼 방식?
지금까지 와이어에서 날짜/시간 문자열을 쉽게 읽고 tm*
으로 바꾸기 위해 NetBSD에서 strptime()
을 포팅했습니다. 그러나 올바르게 현지화 된 tm*
으로 바꿀 때 완전히 뒤죽박죽이므로 strftime()
을 사용하여 현지 시간대의 사용자에게이 시간을 표시 할 수 있습니다. 순진한 접근법은 단순히 localtime(time(0))
과 gmtime(time(0))
의 차이를 취하는 것이지만 일광 절약 시간이 포함 된 임의의 날짜에는 일관성이 없습니다.
필자가 취한 접근법은 POSIX 날짜 및 시간 함수 만 사용하고 필요한 경우 나중에는 strptime()
에서 수행하고 나중에는 필요할 경우 timegm()
에서 수행 할 수 있습니다. 나는 그 일을 계속하는 것을 선호하지만 간단한 사실은 리눅스의 구조체에 Windows의 tm*
구조체가 없다는 것입니다. 따라서 선택의 여지가 없지만 #if WIN32
에 의해 보호되는 이식성이없는 코드를 작성하는 것이 좋습니다. 나는 또한 이것을 위해 부스트를하지 않아도되는 것을 선호한다.
당신이 부스트를 사용하지 않으려는 경우에도, 나는 아직도이 문제가 해결되면 당신이 부스트를 사용하는 것이 좋습니다 ... – villintehaspam