2014-12-08 10 views
6

std::chrono::system_clock::time_point의 기본값은 시계의 기원입니다. 그러나 system_clock의 신기원은 동일하다는 C++ 11 표준에서 어떤 명령도 찾을 수 없습니다. POSIX 신기원 (1970-01-01T00 : 00 : 00Z). Linux 및 Windows에서이 경우를 가정하는 것이 안전합니까? 또는 std::chrono::system_clock::from_time_t(0)을 사용하는 것이 더 현명합니까?POSIX 신기원을 system_clock :: time_point로 얻으십시오.

답변

6

표준은 std::chrono::system_clock::time_point의 신기원을 지정하지 않습니다.

std::chrono::system_clock::time_point의 세 가지 구현 내가 알고 있는데이있다 :이 모든 세 수를 계산 Unix Time, 주위에 얇은 래퍼

  1. 의 libC++
  2. 된 libstdC++
  3. VS

00:00:00 이후로 경과 한 초 (1970 년 1 월 1 일 목요일)로 윤초를 포함하지 않습니다.

이들 모두는 부호있는 64 비트 정수형을 기반으로합니다. 그들 중 누구도 안정적이지 않습니다. libC++에는 마이크로 초의 틱 기간이 있습니다. libstdC++에는 틱 기간 (나노초)이 있고 VS에는 틱 기간이 0.1 마이크로 초입니다.

유용 할 경우 time_t을 거치지 않고 시민 캘린더에서 앞뒤로 변환하기 위해 불특정하지만 공통적 인 신기원을 활용하는 공식을 보여주는 here is a paper입니다.

std::chrono::system_clock::from_time_t을 사용할 때의 장점은 표준에서 작동한다는 것입니다. 단점은 실제로 정밀도가 지정되지 않았지만 1 초의 정밀도로 제한된다는 것입니다.

신기원이 std::chrono::system_clock 인 것으로 가정 할 때의 이점은 지정되지 않았더라도 알려진 모든 구현에서 올바를 것이므로이 대안에 대해 사용할 수있는 정밀도가 제공된 것보다 훨씬 높다는 것입니다 에 의해 time_t.