const char *s = "2011-10-20T09:30:10-05:00";
boost::posix_time::ptime t_local(
boost::gregorian::from_string(std::string(s, s + 10)),
boost::posix_time::duration_from_string(std::string(s + 11, s + 19))
);
boost::posix_time::ptime t(
t_local - boost::posix_time::duration_from_string(std::string(s + 19, s + 25))
);
Теперь t
- это время UTC, а t_local
- местное время.