2012-02-13 3 views
2

나는 boost :: date_time을 사용하여 변환을 수행하는 방법을 고민하고있다. 유닉스 시대 (1970 년 1 월 1 일 00:00)에서 측정 한 밀리 초 값을 사람이 읽을 수있는 문자열로 변환하려고합니다. 2/13/2012 15:20:11이 이상적입니다.밀리 초 UTC를 사람이 읽을 수있는 날짜로 변환하기 Date_Time

나는 몇 가지 std C++/boost 제안을 시도했지만, 아직 어떤 행운은 없었습니다. 여기에 내가 코드를 사용한다 :

long long ticksFromEpoch = 1329117220501; 

    std::time_t tt = static_cast<time_t>(ticksFromEpoch); 

    boost::posix_time::ptime dt = boost::posix_time::from_time_t(tt); 

    // Create a time_zone_ptr for the desired time zone and use it to create a local_date_time 
    boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC")); 
    boost::local_time::local_date_time dt_with_zone(dt, zone); 

    std::stringstream strm; 

    strm.imbue(std::locale(std::cout.getloc(), new boost::local_time::local_time_facet("%Y-%m-%d %H:%M:%S"))); // 15:14 
    strm << dt_with_zone; 

    // Print the stream's content to the console 
    std::cout << strm.str() << std::endl; 

출력은 다음과 같습니다 분명히 잘못된 것입니다 2032-07-01 20:20:37. 나는 ticksFromEpoch 변수를 올바로 생성하지 않는다고 의심하지만 왜 그런지는 잘 모르겠습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다 !!

+1

부스트 솔루션 [1] [1] : http://stackoverflow.com/questions이 같은 것을 사용해야 할 수도 있습니다/8916071/conversion-datetime-to-c-boost/9274998 # 9274998 –

답변

5

time_t은 일반적으로 밀리 초가 아닌 "신기원"이후의 초입니다. 당신이 밀리 초에 대해주의를 해달라고하면 당신이 할 수있을 것입니다 : 당신이 밀리 초에 대한 치료를 할 경우

std::time_t tt = static_cast<time_t>(ticksFromEpoch/1000) 

당신은 12처럼 번 제대로하기 까다 롭습니다있는 (마지막에 다시 추가 할 수 있습니다 중 하나를 : 00 : 00.001 AM)

다른 경로를 선택해야합니다. (안된) [여기]에 게시 Windows 및 POSIX에 대한

boost::posix_time::ptime t2(
    date(1970,Jan,1), //The epoch 
    boost::posix_time::seconds(ticksFromEpoch/1000) + // Number of seconds 
    boost::posix_time::microseconds(ticksFromEpoch % 1000) // And the micros too. 
); 
+0

빠른 응답 주셔서 감사합니다, Michael! 당신의 초기 관찰이 효과가있었습니다. 거의. 'std :: time_t tt = static_cast (ticksFromEpoch/1000); ' 그러나 결과는 여전히 내 지역보다 8 시간 늦은 것 같습니다. –

+2

@Frank, 틱은 UTC 틱이어야합니다 (posix 시간에 맞음). 여기에있는 시간대 기능을 사용하여 현지 시간으로 전환하십시오. http://www.boost.org/doc/libs/1_48_0/doc/html/date_time/local_time.html –

+0

다시 한번 감사드립니다. 아마도 나는 문서를 정확히 이해하지 못한다. 그러나 나는''MST-07 ''과 같은 것으로 명시 적으로 타임 존을 명시 할 필요가있다. 반면에 나는 시스템이 실행될 때 동적으로 살고있는 시간대를 추론하는 것을 찾고있다. 많은 다른 시간대. –

관련 문제