ambiguous_local_time
클래스
이 예외는 a local_time
sys_time
로 변환하려고 할 때 throw되며 결과는 두 번 중 하나일 수 있으며 모호성을 해결하기 위해 지정되지 않았습니다 choose::earliest
choose::latest
.
구문
class ambiguous_local_time : public runtime_error; // C++20
설명
일광 절약 시간에서 가을의 표준 시간으로 전환하는 동안 시계는 기본적으로 추가 시간을 얻습니다. 표준 시간으로 전환하는 것이 시간을 잃는 것을 의미하지 않기 때문에 혼란스러울 수 있습니다. 한 시간 뒤로 떨어지면 시계가 표준 시간에 맞게 조정된 후 전환 전 시간이 반복됩니다. 11월 첫 번째 일요일 오전 2:00에 발생하는 뉴욕의 표준시 변경 사항을 고려하세요. 첫째, 1:00am이 지갑니다. 오전 2시에 시계가 표준 시간으로 전환되므로 지금은 다시 오전 1:00입니다. 즉, 오전 1시에서 새벽 2시 사이의 시간은 "반복"되어 효과적으로 한 시간을 추가합니다.
local_time
이 "추가" 시간 동안 시간을 지정하는 경우 변환하는 방법은 명확하지 않습니다. 변환된 시간을 해당 시간이 발생하는 "첫 번째" 시간 또는 "두 번째"로 처리해야 하나요? 열거형 choose
을 지정하지 않으면 예외가 발생합니다 ambiguous_local_time
.
이 문제는 표준 시간에서 일광 절약 시간으로 변환할 때 존재하지 않습니다. 이 경우 다른 문제가 발생할 수 있습니다. 자세한 내용은 nonexistent_local_time
를 참조하세요.
다음 예제에서는 모호한 변환을 보여줍니다.
예: ambiguous_local_time
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main()
{
try
{
// The following will throw an exception because converting 1:30am local time to system time could be interpreted as either
// 1:30 AM EDT or 1:30 AM EST. Which to choose isn't specified for the conversion, so an ambiguous_local_time
// exception is thrown.
auto zt = zoned_time{"America/New_York", local_days{Sunday[1]/November/2016} + 1h + 30min};
} catch (const ambiguous_local_time& e)
{
std::cout << e.what() << '\n';
}
return 0;
}
2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC
멤버
속성 | 설명 |
---|---|
Constructor | 를 생성합니다 ambiguous_local_time . |
what |
모호성의 특성을 설명하는 문자열을 가져옵니다. |
요구 사항
헤더: <chrono>
(C++20 이후)
네임스페이스: std::chrono
컴파일러 옵션: /std:c++latest
생성자
ambiguous_local_time
를 생성합니다.
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
매개 변수
tp
local_time
변환할 수 없는 것입니다.
i
변환 시도에 대한 정보입니다. 자세한 내용은 local_info
를 참조하세요.
설명
일반적으로 이 예외는 만들지 않습니다. 로 변환 local_time
sys_time
하는 함수에 의해 throw됩니다.
what
모호성의 세부 정보를 설명하는 문자열을 가져옵니다.
[[nodiscard]] virtual const char* what() const noexcept;
반환 값
모호성을 설명하는 문자열입니다. 다음은 그 예입니다.
2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC