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
A
답변
6
표준은 std::chrono::system_clock::time_point
의 신기원을 지정하지 않습니다.
std::chrono::system_clock::time_point
의 세 가지 구현 내가 알고 있는데이있다 :이 모든 세 수를 계산 Unix Time, 주위에 얇은 래퍼
- 의 libC++
- 된 libstdC++
- 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
.