2012-05-07 25 views
7

Tôi có chuỗi được định dạng như "2012-03-28T08: 00: 00". tôi muốn nhận năm, tháng (theo định dạng chuỗi), ngày, giờ, phút, giây và ngày (theo định dạng chuỗi). bất kỳ ai cũng có thể gợi ý cho tôi cách dễ nhất để làm điều đó.cách tăng :: posix_time :: ptime từ chuỗi được định dạng

cảm ơn

+0

là chuỗi của bạn luôn ở trong định dạng ISO mà bạn đã hỏi về trong câu hỏi của bạn hoặc làm bạn cần nó để chấp nhận bất kỳ định dạng của chuỗi? – tinman

Trả lời

0

Sử dụng phương pháp tăng tốc to_string. http://www.boost.org/doc/libs/1_49_0/doc/html/date_time/posix_time.html

+2

Đó là hướng sai. OP muốn chuyển đổi từ một chuỗi thành một thời gian. – tinman

+0

Tôi xin lỗi tôi có nghĩa là phương pháp from_string. – v01d

+0

Trong trường hợp của tôi, chuỗi sẽ luôn ở định dạng "2012-03-28T08: 00: 00" có nghĩa là "yyyy-mm-ddThh: mm: ss" – Dev

9

Nếu các phương thức from_string() hiện tại không phù hợp với nhu cầu của bạn thì bạn có thể sử dụng một khía cạnh đầu vào thời gian cho phép bạn tùy chỉnh định dạng mà chuỗi được phân tích cú pháp.

Trong trường hợp của bạn, bạn có thể sử dụng chuỗi định dạng mở rộng ISO, do đó bạn có thể sử dụng đoạn mã sau để phân tích chuỗi của bạn:

boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet; 
    tif->set_iso_extended_format(); 
    std::istringstream iss("2012-03-28T08:00:00"); 
    iss.imbue(std::locale(std::locale::classic(), tif)); 
    iss >> abs_time; 
    std::cout << abs_time << std::endl; 
+0

nó hoạt động ... cảm ơn rất nhiều – Dev

+2

Đẹp nhưng cái "mới" đó là xấu. Người ta có thể nhận được xung quanh nó xây dựng các khía cạnh như vậy: "boost :: posix_time :: time_input_facet tif (1)". Đối số "1" có nghĩa là không có kinh doanh hài hước với quyền sở hữu và đời sống ... –

9

Nếu không sử dụng các khía cạnh;

ptime dateTime = boost::date_time::parse_delimited_time<ptime>(string, 'T');

Hai from*_string chức năng có giới hạn về những gì các định dạng được chuyển đổi.

  • Không chấp nhận 'T': time_from_string(s).
  • Không chấp nhận '-': from_iso_string(s).

Làm tròn ngày/giờ ISO 8601;

std::string date = to_iso_extended_string(dateTime);

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