2016-07-04 5 views
0

GMT로 작동하는 서버 응용 프로그램이 있습니다. 내 응용 프로그램은 베를린 표준 시간대에있는 서버와 통신하며, 때때로이 서버에서 일부 파일을 읽습니다. 그리고이 파일의 시간을 비교해야합니다. 여름, 겨울 시간 이동을 고려하여 원격 서버 시간을 베를린 표준 시간대에서 GMT로 변환하려면 어떻게해야합니까? boost.date_time에서 mb를 쉽게 찾을 수 있도록 도와 줄 수 있습니까?시간대 사이의 시간 변환

현지 시간에서 GMT로 변환하려하지 않습니다. 특정 시간대를 gmt로 변환 중입니다. 나는 다른 시간대로 그것을하는 튼튼한 방법을 가질 필요가있다.

+0

[가능한 복제본] (http://stackoverflow.com/questions/761791/converting-between-local-times-and-gmt-utc-in-c-c). Google은 귀하의 친구입니다. –

+0

당신이 제안하는 주제가 다릅니다. 그리고 나는 묻기 전에 봤다. – user14416

+0

(질문 자체에서) 주제가 다른 이유는 무엇입니까? –

답변

2

아마도이 free, open source, C++11/14 timezone library이 도움이 될 수 있습니다. 이를 사용하여 UTC를 현지 표준 시간대로 변환하거나 임의의 값으로 변환하거나 임의의 값으로 변환 할 수 있습니다. IANA timezone 또는 임의의 두 값 사이에서 임의로 IANA timezones 사이에서 변환 할 수 있습니다. 라이브러리가 gcc, clang 및 VS로 포팅되었습니다. 하지만 <chrono>이 필요합니다.

다음은 현재 UTC 시간을 가져 와서이를 베를린 현지 시간으로 변환 한 다음 베를린 현지 시간을 현지 시간으로 변환 한 다음 베를린 현지 시간을 UTC로 다시 변환하는 간단한 예제입니다. 그것은 현대 C를 사용하여, 모든 매우 쉽습니다 ++ 구문과 유형 안전 :

#include "tz.h" 
#include <iostream> 

int 
main() 
{ 
    using namespace date; 
    using namespace std::chrono; 
    auto utc = system_clock::now(); 
    auto berlin = make_zoned("Europe/Berlin", utc); 
    auto local = make_zoned(current_zone(), berlin); 
    auto utc2 = berlin.get_sys_time(); 
    std::cout << format("%F %T %Z", utc) << '\n'; 
    std::cout << format("%F %T %Z", berlin) << '\n'; 
    std::cout << format("%F %T %Z", local) << '\n'; 
    std::cout << format("%F %T %Z", utc2) << '\n'; 
} 

나를 위해이 단지 출력 :

2016-07-05 01:41:29.207335 UTC 
2016-07-05 03:41:29.207335 CEST 
2016-07-04 21:41:29.207335 EDT 
2016-07-05 01:41:29.207335 UTC 

예, 당신도 어떤 정밀 당신의 std::chrono::sytem_clock 지원과 시간대를 전환하고, 분석 할 수 그 정밀도를 형식화하십시오.

이 라이브러리가 문제가 있으면 스택 넘침 또는 chat here 또는 open an issue here에 대한 도움을 받으시거나 내 이메일 주소를 검색하여 저에게 직접 연락하십시오.

이 라이브러리는 완벽하게 문서화되었으며 최신 IANA timezone database으로 최신 상태로 유지되도록 설계되었습니다 (latest mess the Egyptian politicians have made이 필요하더라도 3 일 사전 예고없이 시간대 규칙이 변경됨). 타임 스탬프가 오래 되었다면 (1940 년대부터) 걱정하지 마십시오. 이 라이브러리는 IANA이 제공하는 전체 시간대 기록을 완벽하게 지원합니다. 즉, IANA timezone database에 데이터가 있으면이 라이브러리가 오류없이 추출하여 사용합니다.

귀하의 신청서에 도움이되는 경우 베를린 지역의 날짜 리터럴을 쉽고 효율적으로 작성할 수 있습니다. 예를 들어, 여기 베를린 7 월 2016 첫 번째 월요일에 15시 반을 지정합니다 어떻게 (<chrono> 리터럴 필요한 C++ 14) :

auto meet = make_zoned("Europe/Berlin", local_days{2016_y/jul/mon[1]} + 15h + 30min); 
std::cout << meet << '\n'; 

출력 :

2016-07-04 15:30:00 CEST 

당신이 원하는 경우

std::cout << make_zoned("America/New_York", meet) << '\n'; 

출력 :

0 알아은 몇시에 뉴욕 사무소는이 회의에서 재택 근무한다

희망이 도움이됩니다.