कैसे तुलना करने के लिए UTC समय स्ट्रिंग (आईएसओ 8601)

0

सवाल

मैं कुछ कर रहा हूँ के मुद्दों की तुलना करने के लिए समय के बीच तार में जो कर रहे हैं UTC स्वरूप है ।

उदाहरण के लिए:

string1 = "1997-07-16T19:20:30+01:00"
string2 = "2000-07-17T20:20:30+01:00"

मेरा लक्ष्य है, जो पता लगाने के लिए समय है ।

मैं surfed है इंटरनेट के माध्यम से और के बारे में पाया mktime(); लेकिन उदाहरण के लिए तार कर रहे हैं सामान्य स्वरूप में, दूसरे हाथ पर, मेरे स्ट्रिंग में ISO8601 स्वरूप है ।

मैं देख रहा हूँ के लिए एक समाधान के साथ संगत है जो विंडोज और लिनक्स.

मैं वास्तव में appriciate कुछ मदद की है ।

c++ datetime
2021-11-24 02:57:06
1

सबसे अच्छा जवाब

0

सबसे करने के लिए आसानी से खाते में लेने के यूटीसी ऑफसेट क्षेत्र, सी++20 <chrono> जाने के लिए रास्ता है. यदि आप C++11/14/17, वहाँ मौजूद है एक मुक्त, खुला स्रोत, शीर्षक-केवल पूर्वावलोकन के इस भाग के C++20 इस्तेमाल किया जा सकता है. और यह दोनों पर काम करता है, लिनक्स और Windows. यदि आप का उपयोग कर रहे हैं सी, यह आसान समाधान उपलब्ध नहीं है.

#include <chrono>
#include <iostream>
#include <sstream>

int
main()
{
    using namespace std;
    using namespace std::chrono;

    string string1 = "1997-07-16T19:20:30+01:00";
    string string2 = "2000-07-17T20:20:30+01:00";
    sys_seconds t1, t2;

    string format = "%FT%T%Ez";

    istringstream in{string1};
    in.exceptions(ios::failbit);
    in >> parse(format, t1);
    in.clear();
    in.str(string2);
    in >> parse(format, t2);

    if (t1 > t2)
        cout << string1 << " is later than " << string2 << '\n';
    else if (t2 > t1)
        cout << string2 << " is later than " << string1 << '\n';
    else
        cout << string1 << " is the same time as " << string2 << '\n';
}

ऊपर है और C++20 समाधान है ।

  • प्रकार sys_seconds एक सेकंड परिशुद्धता UTC टाइमस्टैम्प. जब इस में पार्स के साथ parse, पार्स समय माना जाता है के रूप में स्थानीय समय के साथ, और द्वारा संशोधित पार्स यूटीसी ऑफसेट किया जा रहा से पहले करने के लिए आवंटित sys_seconds तर्क । के E संशोधक में %Ez निर्देश parse के लिए देखने के लिए : में ऑफसेट । %z (बिना Eलग रहा है ) के लिए एक ऑफसेट के रूप hhmm.

  • मैं निर्धारित किया है failbit धारा में इतना है कि किसी भी पार्स त्रुटियों के परिणाम में एक शोर अपवाद नहीं है । यदि आप बल्कि के लिए जाँच करें in.fail() मैन्युअल रूप से, न आना सेटिंग failbit.

  • एक बार t1 और t2 विश्लेषित कर रहे हैं में, वे कर सकते हैं की तुलना में हो बस की तरह गणित प्रकार के ।

  • अगर आप की जरूरत का उपयोग करने के लिए मुक्त, खुला स्रोत, शीर्षक-केवल पूर्वावलोकन, बस जोड़ें #include "date/date.h" और using namespace date; के ऊपर करने के लिए कार्यक्रम.

यदि आप आश्वासन दिया जा सकता है कि यूटीसी ऑफसेट हमेशा से रहे हैं के बराबर है, तो एक सरल स्ट्रिंग तुलना के लिए पर्याप्त है:

if (string1 > string2)
    cout << string1 << " is later than " << string2 << '\n';
else if (string2 > string1)
    cout << string2 << " is later than " << string1 << '\n';
else
    cout << string1 << " is the same time as " << string2 << '\n';

सी में (और अगर यूटीसी ऑफसेट अलग अलग हो सकते हैं), आप को पार्स करने के लिए ऑफसेट और से उन्हें घटाना स्थानीय समय मैन्युअल रूप से ।

2021-11-24 14:20:19

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में