Trong C++, cách dễ nhất để thêm một ngày vào một ngày ở định dạng này là gì:
"20090629-05:57:43"
Có lẽ đang sử dụng Boost 1.36 - Tăng::ngày
,Tăng cường::posix_date
hoặc bất kỳ sự thúc đẩy nào khác hoặc tiêu chuẩn
Chức năng thư viện, tôi không quan tâm đến các thư viện khác.
Những gì tôi đã nghĩ ra cho đến nay:
Định dạng chuỗi (chia phần ngày và giờ thành các thao tác chuỗi) để có thể khởi tạo boost::gregorian::date
, định dạng ngày dự kiến như sau:
"2009-06-29 05:57:43"
tôi có
"20090629-05:57:43"
Thêm một ngày (tăng ngày_duration
nội dung)
- Sẽ
Chuyển đổi trở lại _simple_string
và nối thêm phần thời gian (thao tác chuỗi)
Có cách nào dễ dàng hơn/tốt hơn để làm điều này?
Mối quan tâm của tôi là hiệu quả thời gian chạy.
Mã mẫu cho các bước trên:
sử dụng không gian tên boost::gregorian;
chuỗi gốc("20090629-05:57:43");
chuỗi dday(orig.substr(0,8));
chuỗi dtime(orig.substr(8));
ngày d(from_undelimited_string(dday));
ngày_duration dd(1);
d += đ;
kết quả chuỗi (to_iso_string(d) + dtime);
kết quả:
20090630-05:57:43
Điều này rất gần với phương pháp đơn giản nhất mà tôi biết. Cách duy nhất để đơn giản hóa hơn nữa là sử dụng giao diện cho nội dung I/O, để loại bỏ nhu cầu thao tác chuỗi:
#include
#include
#include
#include
sử dụng không gian tên boost::local_time;
int chính() {
std::stringstream ss;
local_time_facet* out_facet = new local_time_facet();
local_time_input_facet* input_facet = new local_time_input_facet();
ss.imbue(std::locale(std::locale::classic(), out_facet));
ss.imbue(std::locale(ss.getloc(), input_facet));
local_date_time ldt(not_a_date_time);
input_facet->format("%Y%m%d-%H:%M:%S");
ss.str("20090629-05:57:43");
ss >> ldt;
out_facet->format("%Y%m%d-%H:%M:%S");
ss.str(std::string());
ss << ldt;
std::cout << ss.str() << std::endl;
}
Tuy nhiên, điều này dài hơn và được cho là khó theo dõi hơn. Tôi chưa cố gắng chứng minh điều này, nhưng tôi nghi ngờ hiệu quả thời gian chạy sẽ gần giống như vậy.
Tôi là một lập trình viên xuất sắc, rất giỏi!