2010-08-23 32 views
5

Tôi có ngày trong một loạt các định dạng. Bây giờ tôi muốn có một hàm (từ một số thư viện) trong C++ có thể phân tích chuỗi ngày/giờ này và cung cấp cho tôi một số cấu trúc như tm hoặc chuyển đổi chúng thành một số biểu diễn xác định để tôi có thể chơi với ngày/giờ .Thư viện C++ (unix) để phân tích cú pháp chuỗi ngày/giờ Bao gồm các múi giờ

Một số định dạng mà tôi thấy như sau: Tue, 19 Tháng Hai 2008 20:47:53 0530 Tue, 28 tháng tư 2009 18:22:39 -0700 (PDT)

tôi có thể làm những cái mà không có múi giờ nhưng đối với những người có múi giờ, về cơ bản tôi cần thư viện để chuyển đổi nó thành UTC trong cấu trúc tm.

Tôi đã thử tăng cường và strptime, nhưng theo như tôi biết, cả hai không có múi giờ hỗ trợ trên đầu vào. có bất cứ điều gì mà tôi đã bỏ lỡ?

BẤT K help trợ giúp nào về điều này sẽ thực sự được đánh giá cao.

Kính trọng

+0

Cố gắng sử dụng locale? http://www.cplusplus.com/reference/std/locale/ – DumbCoder

Trả lời

2

Bạn có thể làm điều đó với tăng cường, nhưng có một chút đặc biệt về định dạng múi giờ trong chuỗi đầu vào. Nó phải ở trong POSIX time zone format.

Ví dụ:

#include <iostream> 
#include <boost/date_time/local_time/local_time.hpp> 
#include <boost/date_time/time_facet.hpp> 
int main() 
{ 
     std::string msg = "28 Apr 2009 18:22:39 PST-8PDT,M4.1.0,M10.1.0"; // or just "PDT-7" but that will be a new, fake time zone called 'PDT' 

     std::istringstream ss(msg); 
     ss.imbue(std::locale(ss.getloc(), 
       new boost::local_time::local_time_input_facet("%d %b %Y %H:%M:%S%F %ZP"))); 
     boost::local_time::local_date_time t(boost::date_time::pos_infin); 
     ss >> t; 
     std::cout << t << '\n'; 
     // and now you can call t.to_tm() to get your tm structure 
} 

tôi sẽ thêm một số loại tiền xử lý để chuyển đổi các định dạng múi giờ của bạn để posix định dạng, và sau đó ăn các dây để thúc đẩy.

Các vấn đề liên quan