开发者

c++之std::get_time和std::put_time

目录
  • std::get_time和std::put_time
    • std::get_time
    • std::put_time
  • 总结

    std::get_time和std::put_time

    在 C++ 中,std::get_time 和 std::put_time 是处理日期和时间格式化的两个实用函数。它们提供了一种简单的方法来解析和格式化日期时间字符串。它们都属于<iomanip>头文件。

    它们是 std::istream 和 std::ostream 的操作符,因此,它们没有传统意义上的构造函数。它们用于格式化和解析日期时间,但本身并不涉及直接创建对象。

    std::get_time

    std::get_time 是一个流操作符,用于从流中解析日期时间字符串。

    它实际上是一个函数模板,定义在 头文件中。

    template<typename CharT, typename Traits>
    std::basic_istream<CharT, Traits>& get_time(stdphp::basic_istream<CharT, Traits>& is, std::tm* t, const CharT* fmt);
    • is: 输入流(例如 std::istringstream)。
    • t: std::tm 结构的指针,用于存储解析后的日期时间。
    • fmt: 日期时间格式字符串,用于指定如何解析输入字符串。

    用法

    #include <IOStream>
    #include <sstream>
    #include <iomanip>
    #include <ctime>
    
    int main() {
        std::string datetime_str = "2024-08-14 15:30:00";
        std::tm t编程客栈m = {};
        std::istringstream ss(datetime_str);
    
        // 解析日期和时间
        ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
    
        if (ss.fail()) {
            std::cerr << "Error parsing date and time" << std::endl;
            return 1;
        }
    
        // 输出解析结果
        std::cout << "Year: " << tm.tm_year + 1900 << std::endl;
       编程 std::cout << "Month: " << tm.tm_mon + 1 << std::endl;
        std::cout << "Day: " << tm.tm_mday << std::endl;
        std::cout << "Hour: " << tm.tm_hour << std::endl;
        std::cout << "Minute: " << tm.tm_min << std::endl;
        std::cout << "Second: " << tm.tm_sec << std::endl;
    
        return 0;
    }
    • std::get_time(python&tm, “%Y-%m-%d %H:%M:%S”):解析 datetime_str 字符串,并将结果填充到 std::tm 结构中。格式字符串 “%Y-%m-%d %H:%M:%S” 说明了输入字符串的日期时间格式。
    • tm.tm_year:存储的是从1900年开始的年份,所以需要加上1900才能得到实际年份python
    • tm.tm_mon:存储的是从0开始的月份,所以需要加上1才能得到实际月份。

    std::put_time

    std::put_time 是另一个流操作符,用于将 std::tm 结构格式化为字符串。

    它也是一个函数模板,定义在 头文件中。

    template<typename CharT, typename Traits>
    std::basic_ostream<CharT, Traits>& put_time(std::basic_ostream<CharT, Traits>& os, const std::tm* t, const CharT* fmt);
    • os: 输出流(例如 std::ostringstream)。
    • t: 指向 std::tm 结构的指针,用于格式化日期时间。
    • fmt: 日期时间格式字符串,用于指定输出的格式。

    用法

    #include <iostream>
    #include <sstream>
    #include <iomanip>
    #include <ctime>
    
    int main() {
        std::tm tm = {};
        tm.tm_year = 2024 - 1900; // 年份从1900年开始
        tm.tm_mon = 8 - 1; // 月份从0开始
        tm.tm_mday = 14;
        tm.tm_hour = 15;
        tm.tm_min = 30;
        tm.tm_sec = 0;
    
        std::ostringstream ss;
    
        ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S");
    
        std::cout << "Formatted date and time: " << ss.str() << std::endl;
    
        return 0;
    }
    • std::put_time(&tm, “%Y-%m-%d %H:%M:%S”):将 std::tm 结构中的日期时间信息格式化为字符串,格式为 “%Y-%m-%d %H:%M:%S”。
    • ss.str():获取格式化后的日期时间字符串。

    这两个操作符分别用于日期时间的解析和格式化,但它们并不涉及直接创建对象的构造函数。它们是 C++ 标准库提供的流操作功能,通过流操作符来处理日期和时间。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜