c++ - Howto format a boost::date_time-object as per RFC 3339 -


मैं अपने आवेदन में समय का प्रतिनिधित्व करने के लिए boost में date_time पुस्तकालय का उपयोग करना चाहता हूं। यह एप्लिकेशन एटम फीड उत्पन्न करेगा, जो बदले में विनिर्दिष्ट प्रारूप में टाइम-टिकटों को निर्दिष्ट करता है, उदाहरण के लिए "1990-12-31 T23: 59: 60Z" या "1990-12-31 टी 15: 59: 60-08: 00"।

तो, मैं इस आरएफसी के अनुसार समय कैसे प्रारूपित कर सकता हूं?

मैं पूरे दिन पढ़ रहा हूं, और मुझे पता नहीं लग सकता है कि कैसे अंत में जब मुझे इसकी आवश्यकता है इसके अलावा, आरएफसी एक वैकल्पिक आंशिक सेकंड का समर्थन करता है, लेकिन इसके केवल एक अंक (जैसे "1990-12-31T23: 59: 60.5z") (*) मुझे यह पता नहीं लग सकता है कि यह कैसे करना है।

मैं हमेशा अपनी स्वयं की स्वरूपण रूटीन लिख सकता हूं जो कि विभिन्न आवश्यक क्षेत्रों को पढ़ता है, लेकिन मुझे लगता है कि यह date_time लाइब्रेरी।

इस पुस्तकालय के लिए फ़ॉर्मेटर्स लिखने का कोई अनुभव? या क्या मैं गलत काम कर रहा हूं?

(*): मुझे ऐसा लगता है कि आरएफसी में दिया गया एबीएनएफ केवल एक अंकीय आंशिक सेकंड की अनुमति देता है, लेकिन एक ही आरएफसी के उदाहरण में दो अंकीय आंशिक सेकंड। इसका मतलब क्या है?

  1. आरएफसी से एबीएनएफ का कहना है कि डॉट के बाद कम से कम एक अंक, अधिकतम परिभाषित अधिकतम नहीं है।

  2. ज़ेड के लिए कोई वास्तविक आवश्यकता नहीं है, आप इसके बजाय 00:00 का उपयोग कर सकते हैं, और ये पहलुओं के साथ संभव है

  3. कुछ दुर्लभ परिस्थितियों में date_time "Z" उत्पन्न करेगा। को बढ़ावा देने से कोड स्नैपशॉट देखें (स्थानीय_डेटेड_टाइम। एचपी) जो बताता है कि यह नीचे है:

  std :: string zone_name (bool as_offset = false) const {if (zone_ == बढ़ावा :: साझा_पीटीआर ()) {यदि (as_offset) {return std :: string ("Z"); } Else {return std :: string ("समन्वित वैश्विक समय"); } ...  

समान है अगर zone_abbrev फ़ंक्शन में ...

और इसके उपयोग के उदाहरण

<पूर्व> स्लिमक @ दरेडई: ~ / store / kodowanie / moje / test $ cat boost_date_time.cpp #include "boost / date_time.hpp" # शामिल करें "boost / date_time / local_time / local_time.hpp" नामस्थान बढ़ावा :: posix_time; नामस्थान बढ़ावा :: स्थानीय_टाइम का उपयोग करना; Int main () {local_date_time t = local_sec_clock :: local_time (time_zone_ptr ()); Local_time_facet * lf (नया लोकल_टाइम_फैसैट ("% Y-% m-% dT% H:% M:% S% F% Q")); Std :: cout.imbue (std :: locale (std :: cout.getloc (), एलएफ)); Std :: cout & lt; & lt; टी एंड एलटी; & lt; std :: endl; वापसी 0; } स्लिमक @ डार्डेई: ~ / store / kodowanie / moje / test $ g ++ boost_date_time.cpp & amp; ./a.out 2009-01-30 टी 12: 15: 56 एस स्लिमक @ डार्डेई: ~ / store / kodowanie / moje / test $


Comments