ยังไงเพื่อเปรียบเทียบระหว่าง UTC รั้งข้อความ(ISO 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

เพื่อส่วนใหญ่อย่างง่ายดายพาเข้าไปในบัญชีผู้ใช้คนชดเชย UTC สนาม C++20 <chrono> คือหนทางที่ถูกต้องนะ ถ้าคุณมี C++11/14/17 มีอยู่ก่อนเป็ นอิสระเปิดแหล่งข่าวของส่วนหัวอย่างเดียวตัวอย่าง ของส่วนนี้ของภาษา C++language 20 ที่สามารถจะใช้ได้ และมันได้ผลกับทั้งระบบลินุกซ์และหน้าต่าง ถ้าคุณกำลังใช้ซีนี่เรื่องง่ายแก้ปัญหายังไม่มีอยู่

#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ที่เวลาต่างๆที่วิเคราะห์ถือว่าเป็นที่เวลาท้องถิ่นและแก้ไขโดยการต่างๆที่วิเคราะห์ชดเชย UTC ก่อนถูกรับมอบหมายให้มาทำข่าว sys_seconds เถียงกันอยู่นะ คน E ตัวแปลงอยู่ %Ez ไม่สั่ parse ต้องมองหาคนที่ : ในช่วงเวลา. %z (ไม่มี Eดูเป็นช่วงเวลาของรูปแบบ hhmm.

  • ผมตั้ง failbit อยู่ในสายข้อมูลดังนั้นมีการวิเคราะห์ข้อผิดพลาดถูกส่งเสียงก็ข้อยกเว้น ถ้าลูกอยากตรวจหา in.fail() ด้วยตนเอง,ไม่เติมการตั้งค่า failbit.

  • ครั้งนึง t1 แล้ว t2 พต่างๆที่วิเคราะห์ในพวกเขาจะได้เปรียบเทียบเหมือนรวมอัตโนมัติประเภท.

  • ถ้าคุณต้องการเพื่อใช้ เป็นอิสระเปิดแหล่งข่าวของส่วนหัวอย่างเดียวตัวอย่าง,แค่เพิ่ม #include "date/date.h" แล้ว using namespace date; เพื่อที่อยู่เหนือโปรแกรม

ถ้าคุณสามารถเป็นระองค์มั่นใจได้ว่า\ค UTC แบมันเท่าเทียมกันจากนั้นก็ง่ายอย่างข้อความเปรียบเทียบเป็นเพียงพ:

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';

ใน C(และถ้า UTC แบสามารถจะเปลี่ยนแปล),คุณจะต้องการวิเคราะห์ในแบและลบมันออกมาจากท้องถิ่นครั้งด้วยตัวคุณเองก่อน

2021-11-24 14:20:19

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่