0Pricing
C++ Academy · บทเรียน

จุดเวลา

แทนช่วงเวลาต่าง ๆ

จุดเวลา เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

จุดเวลาคืออะไร

std::chrono::time_point แทนช่วงเวลาที่เฉพาะเจาะจงซึ่งวัดจากจุดเริ่มต้นของนาฬิกา โดยจับคู่นาฬิกาเข้ากับช่วงเวลาที่ผ่านไปนับจากจุดเริ่มต้นนั้น

  • ได้ค่ากลับมาจาก clock::now()
  • การลบจุดเวลาสองจุดจะได้ช่วงเวลา
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    time_point<steady_clock> tp = steady_clock::now();
    std::cout << "Captured a moment: " << (tp.time_since_epoch().count() != 0) << '\n';
    return 0;
}

time_since_epoch

จุดเวลาทุกจุดสามารถรายงานระยะห่างจากจุดเริ่มต้นของนาฬิกาได้ด้วย time_since_epoch() ซึ่งคืนค่าเป็นช่วงเวลา

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    auto d = tp.time_since_epoch();
    auto s = duration_cast<seconds>(d);
    std::cout << "Positive epoch seconds: " << (s.count() > 0) << '\n';
    return 0;
}

การลบจุดเวลา

การลบจุดเวลาหนึ่งออกจากอีกจุดหนึ่งจะได้ช่วงเวลา ซึ่งเป็นเวลาที่ผ่านไประหว่างช่วงเวลาทั้งสอง

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto a = steady_clock::now();
    auto b = steady_clock::now();
    auto diff = b - a;
    std::cout << "Elapsed ns is non-negative: " << (diff.count() >= 0) << '\n';
    return 0;
}

การบวกช่วงเวลา

การบวกช่วงเวลาเข้ากับจุดเวลาจะสร้างจุดเวลาใหม่ในอนาคต หรือในอดีตหากใช้การลบ วิธีนี้ใช้คำนวณกำหนดเวลาได้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    using namespace std::chrono_literals;
    auto now = steady_clock::now();
    auto deadline = now + 10s;
    std::cout << "Deadline is after now: " << std::boolalpha << (deadline > now) << '\n';
    return 0;
}

การเปรียบเทียบจุดเวลา

จุดเวลาจากนาฬิกาเดียวกันรองรับตัวดำเนินการเปรียบเทียบทั้งหมด ทำให้คุณตรวจสอบได้ว่าช่วงเวลาหนึ่งอยู่ก่อนหรือหลังอีกช่วงเวลาหนึ่ง

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto first = steady_clock::now();
    auto second = steady_clock::now();
    std::cout << std::boolalpha << (first <= second) << '\n';
    return 0;
}

จุดเวลาที่ขึ้นกับนาฬิกา

จุดเวลาจะผูกกับชนิดข้อมูลของนาฬิกา คุณไม่สามารถเปรียบเทียบจุดเวลาจาก system_clock กับจุดเวลาจาก steady_clock ได้โดยตรง เพราะจุดเริ่มต้นของนาฬิกาทั้งสองต่างกัน

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    system_clock::time_point sys = system_clock::now();
    steady_clock::time_point mono = steady_clock::now();
    std::cout << "Both captured: " << ((sys.time_since_epoch().count() != 0) && (mono.time_since_epoch().count() != 0)) << '\n';
    return 0;
}

การแปลงเป็นชนิดเวลา

system_clock::to_time_t แปลงจุดเวลาตามปฏิทินให้เป็น time_t แบบภาษาซี ซึ่งคุณสามารถจัดรูปแบบเพื่อแสดงผลให้มนุษย์อ่านได้

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    std::time_t t = system_clock::to_time_t(tp);
    std::cout << "time_t is positive: " << (t > 0) << '\n';
    return 0;
}

from_time_t

ในทางกลับกัน system_clock::from_time_t จะสร้างจุดเวลาจากค่า time_t เช่น การประทับเวลาที่บันทึกไว้

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    using namespace std::chrono;
    std::time_t t = 1000000000;
    auto tp = system_clock::from_time_t(t);
    auto back = system_clock::to_time_t(tp);
    std::cout << "Round trip ok: " << std::boolalpha << (back == t) << '\n';
    return 0;
}

การคำนวณกำหนดเวลา

รูปแบบที่ใช้กันทั่วไปคือ บันทึกค่า now() บวกช่วงเวลาหมดเวลา แล้วเปรียบเทียบกับค่า now() ใหม่ในภายหลัง เพื่อตรวจสอบว่าพ้นกำหนดเวลาแล้วหรือไม่

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    using namespace std::chrono_literals;
    auto deadline = steady_clock::now() + 0ms;
    auto current = steady_clock::now();
    bool expired = current >= deadline;
    std::cout << "Expired: " << std::boolalpha << expired << '\n';
    return 0;
}

ความละเอียดของจุดเวลา

ความละเอียดของจุดเวลาจะตรงกับชนิดช่วงเวลาของนาฬิกา คุณสามารถแปลงจุดเวลาเป็นหน่วยที่หยาบกว่าด้วย time_point_cast ได้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    auto secs_tp = time_point_cast<seconds>(tp);
    std::cout << "Cast preserved sign: " << (secs_tp.time_since_epoch().count() > 0) << '\n';
    return 0;
}

การจัดเก็บการประทับเวลา

หากต้องการเก็บช่วงเวลาหนึ่งไว้ ให้แปลงเป็นจำนวนวินาทีนับจากจุดเริ่มต้น เก็บค่าจำนวนเต็มนั้น แล้วสร้างจุดเวลากลับคืนมาเมื่อต้องการใช้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto tp = system_clock::now();
    long long stored = duration_cast<seconds>(tp.time_since_epoch()).count();
    std::cout << "Stored value usable: " << (stored > 0) << '\n';
    return 0;
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับการคำนวณจุดเวลา

สรุปทบทวน

คุณได้เรียนรู้ว่า time_point ทำสิ่งต่อไปนี้ได้

  • ระบุช่วงเวลาที่เฉพาะเจาะจงเมื่อเทียบกับจุดเริ่มต้นของนาฬิกา
  • รายงานระยะเยื้องจากจุดเริ่มต้นผ่าน time_since_epoch()
  • รองรับการบวกและลบช่วงเวลา รวมถึงการเปรียบเทียบ
  • แปลงเป็นและแปลงกลับจาก time_t เพื่อแสดงผลและจัดเก็บ

ถัดไป คุณจะใช้เครื่องมือเหล่านี้เพื่อวัดประสิทธิภาพและเปรียบเทียบเวลาการทำงานของโค้ด

คำถามที่พบบ่อย

บทเรียน “จุดเวลา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “จุดเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “จุดเวลา”

แทนช่วงเวลาต่าง ๆ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “จุดเวลา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ช่วงเวลาและนาฬิกา
  2. จุดเวลา
  3. การวัดประสิทธิภาพโค้ด
  4. ปฏิทินและเขตเวลา
← กลับไปที่ C++ Academy