Nhập: chuỗi có ngày và giờ tùy chọn. Các biểu diễn khác nhau sẽ tốt đẹp nhưng cần thiết. Các chuỗi được cung cấp bởi người dùng và có thể không đúng định dạng. Ví dụ:Cách phân tích ngày/giờ từ chuỗi?
"2004-03-21 12:45:33"
(tôi xem xét việc này cách bố trí mặc định)"2004/03/21 12:45:33"
(tùy chọn bố trí)"23.09.2004 04:12:21"
(định dạng Đức, không bắt buộc)"2003-02-11"
(thời gian có thể bị thiếu)
Đầu ra cần thiết: Giây từ Epoch (1970/01/01 00:00:00) hoặc một số điểm cố định khác.
Tiền thưởng: Ngoài ra, việc đọc UTC-offset của thời gian hệ thống cục bộ sẽ tuyệt vời.
Đầu vào được giả định là giờ địa phương trên máy được đề cập. Đầu ra cần phải là UTC. Hệ thống chỉ là Linux (Debian Lenny và Ubuntu cần thiết).
Tôi đã cố sử dụng boost/date_time
, nhưng phải thừa nhận rằng tôi không thể bao quanh đầu tài liệu. Các công trình sau đây mà không cần phải chuyển đổi từ hệ thống theo giờ địa phương để UTC:
std::string date = "2000-01-01";
boost::posix_time::ptime ptimedate = boost::posix_time::time_from_string(date);
ptimedate += boost::posix_time::hours(Hardcoded_UTC_Offset);// where to get from?
struct tm = boost::posix_time::to_tm(ptimedate);
int64_t ticks = mktime(&mTmTime);
Tôi nghĩ boost::date_time
có thể cung cấp UTC cần bù đắp, nhưng tôi sẽ không biết làm thế nào.
Tôi tin rằng bạn sẽ phải phân tích chúng theo cách riêng của bạn (có lẽ với tinh thần) vì số tháng đơn trong "2004-3-21" không được phân tích bởi bất kỳ thời gian tăng định dạng IO nào http: //www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.format_flags – Cubbi
@Cubbi: nếu đó là vấn đề duy nhất, sẽ dễ dàng hơn nhiều để kiểm tra điều đó và chèn 0 vào chuỗi hơn là mang tinh thần vào bức tranh. –
@Cubbi - bạn có thể xử lý các định dạng đầu vào và đầu ra tùy chỉnh trong 'boost :: date_time' -' boost :: spirit' quá mức ở đây –