다음을 통해 공유


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

참고 항목

<chrono>
to_sys
nonexistent_local_time
헤더 파일 참조