मैं HTTP प्रॉक्सी का एक प्रकार लिख रहा हूँ बनाने के लिए बढ़ावा देने, तो मैं 3 काम करने के लिए सक्षम होना चाहिए:उपयोग DATE_TIME पार्स और HTTP-दिनांकों
- एक HTTP की तारीख 3 के किसी भी पार्स प्रारूप RFC 2616, sec 3.3,
- फ़ाइल दिनांक-समय को HTTP-दिनांक स्ट्रिंग में कनवर्ट करें, और
- स्ट्रिंग की तारीख आउटपुट करें।
संदर्भ के लिए, इस समय के उदाहरण हैं जो मुझे पार्स करने की आवश्यकता है। मैं उत्पादन केवल प्रथम प्रारूप होगा:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
मैं यकीन है कि बूस्ट DATE_TIME कर रहा हूँ यह सब कर सकते हैं, लेकिन मैं नंबर 1. के साथ कुछ परेशानी किसी को पहले से ही यह करने के लिए कोड है आ रही है? शायद मैं कुशलता से Google का उपयोग नहीं कर रहा हूं, लेकिन मुझे कहीं भी बढ़ावा देने के साथ ऐसा करने का उदाहरण नहीं मिल रहा है।
किसी भी मदद के लिए धन्यवाद!
अद्यतन: मेरे पास एक समाधान है, लेकिन दूसरा पार्सर गलत वर्ष है (मुझे लगता है क्योंकि यह 2 अंकों का वर्ष है) और अंतिम पार्सर एक अपवाद देता है (नीचे आउटपुट देखें)।
try
{
// output time now in GMT
// format we want: Sun, 06 Nov 1994 08:49:37 GMT
boost::local_time::local_date_time t(boost::local_time::local_sec_clock::local_time(boost::local_time::time_zone_ptr()));
boost::local_time::local_time_facet* lf(new boost::local_time::local_time_facet("%a, %d %b %Y %H:%M:%S GMT"));
std::cout.imbue(std::locale(std::cout.getloc(), lf));
std::cout << t << std::endl;
// get a file mod time into the correct format
boost::filesystem::path p("../code/main.cpp");
boost::posix_time::ptime pt = boost::posix_time::from_time_t(
boost::filesystem::last_write_time(p));
boost::local_time::local_date_time t2(pt, boost::local_time::time_zone_ptr());
std::cout << t2 << std::endl;
std::stringstream ss;
ss.exceptions(std::ios_base::failbit);
// input date-time
boost::local_time::local_time_input_facet* lif1(new boost::local_time::local_time_input_facet("%a, %d %b %Y %H:%M:%S GMT"));
ss.imbue(std::locale(std::locale::classic(), lif1));
ss.str("Sun, 06 Nov 1994 08:49:37 GMT");
ss >> t;
std::cout << t << std::endl;
boost::local_time::local_time_input_facet* lif2(new boost::local_time::local_time_input_facet("%A, %d-%b-%y %H:%M:%S GMT"));
ss.imbue(std::locale(std::locale::classic(), lif2));
ss.str("Sunday, 06-Nov-94 08:49:37 GMT");
ss >> t;
std::cout << t << std::endl;
boost::local_time::local_time_input_facet* lif3(new boost::local_time::local_time_input_facet("%a %b %e %H:%M:%S %Y"));
ss.imbue(std::locale(std::locale::classic(), lif3));
ss.str("Sun Nov 6 08:49:37 1994");
ss >> t;
std::cout << t << std::endl;
}
catch (std::exception& e)
{
std::cout << "Exception: " << e.what() << std::endl;
}
आउटपुट:
Sat, 15 May 2010 03:01:13 GMT
Sat, 15 May 2010 03:01:01 GMT
Sun, 06 Nov 1994 08:49:37 GMT
Sat, 06 Nov 2094 08:49:37 GMT
Exception: Parse failed. No match found for ''
आपको हमेशा अपने कोड के शीर्ष पर शीर्षलेख शामिल करना चाहिए। ऐसा इसलिए है कि लोग आपका कोड उठा सकते हैं और इसे संकलित कर सकते हैं। –