如何优雅地将字符串转成时间戳

一、string转int

在进行字符串转时间戳前,需要先将字符串转换成int类型的秒数。可以使用std::stoi()函数将字符串转换成int。

    #include <string> 
    #include <iostream>
    #include <chrono>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        std::cout << timestamp << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。

二、string转为json

如果需要将时间戳加入到json数据中,可以使用C++ JSON库,如jsoncpp或者rapidjson。

    #include <iostream>
    #include <json/json.h>
    #include <chrono>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        Json::Value root;
        root["time"] = (Json::Int64)timestamp;
        std::cout << root.toStyledString() << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳,最后将时间戳对象加入到json对象中。

三、string转int的方法

在转换字符串为int时,可以考虑使用std::stoi()函数或者std::stringstream类。std::stoi()函数将字符串转换为int类型;std::stringstream类也可以将字符串转化为任何基本类型。

    #include <iostream>
    #include <chrono>
    #include <string> 
    #include <sstream>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        int timestamp_int = std::stoi(std::to_string(timestamp));
        std::stringstream ss;
        ss << "timestamp:" << timestamp_int;
        std::cout << ss.str() << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。将时间戳对象转换为字符串,再使用std::stoi()函数将其转换成int类型。

四、string转double

有时候需要将时间表示成一个小数,可以使用std::stod()函数将时间戳转换为double类型。

    #include <iostream>
    #include <chrono>
    #include <string> 
   
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        double timestamp_double = std::stod(std::to_string(timestamp));
        std::cout << timestamp_double << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。将时间戳对象转换为字符串,再使用std::stod()函数将其转换成double类型。

五、string转为list

将一个时间戳转换成一个包含年、月、日、时、分、秒的列表,可以使用std::stringstream类,把时间戳分割成多个字符串,再push_back()到list中。

    #include <iostream>
    #include <chrono>
    #include <string> 
    #include <list>
    #include <sstream>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        std::stringstream ss(std::to_string(timestamp));
        std::string item;
        std::list<std::string> timestamp_list;
        while (std::getline(ss, item, ' ')) {
            timestamp_list.push_back(item);
        }
        
        for (auto x : timestamp_list) {
            std::cout << x << " " ;
        }
        std::cout << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。使用std::stringstream类将时间戳分割成多个字符串,再使用push_back()函数将字符串push到list中,形成一个包含年、月、日、时、分、秒的列表。

六、string转color

有时候需要将时间表示成颜色码,可以使用std::to_string()函数将时间戳转换为颜色码。实现方法为,使用std::strftime()函数格式化时间戳,然后将格式化后的时间前加“#”,变成一个6位的十六进制字符串。

    #include <iostream>
    #include <chrono>
    #include <string> 
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        std::strftime(outString, sizeof(outString), "%Y-%m-%d %H:%M:%S", &tm);
        std::string color_string = "#" + std::to_string(std::stoul(outString, nullptr, 0) & 0xFFFFFF);
        std::cout << color_string << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。使用std::strftime()函数格式化时间戳,使用std::stoul()函数将格式化后的字符串转换成无符号长整型,并且与0xFFFFFF进行位与操作。将所得的值转换成带“#”的十六进制字符串,即可得到颜色码。

七、string转integer

使用std::istringstream类的>>操作符将字符串转换成整型。在转换时需要判断字符串是否有非数字字符。

    #include <iostream>
    #include <string> 
    #include <sstream>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        std::istringstream iss1(std::to_string(timestamp));
        int timestamp_int = 0;
        iss1 >> timestamp_int;
        if (!iss1.fail()) {
            std::cout << timestamp_int << std::endl;
        } else {
            std::cout << "转换失败" << std::endl;
        }
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。使用std::istringstream类将时间戳转换成整型。需要注意的是,在转换时需要先判断字符串是否有非数字字符。

八、string转intc

使用sscanf()函数将字符串转换成整型。

    #include <iostream>
    #include <string> 
   
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        int timestamp_int = 0;
        std::sscanf(std::to_string(timestamp).c_str(), "%d", &timestamp_int);
        std::cout << timestamp_int << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。使用sscanf()函数将时间戳转换成整型。

九、string转streamc

使用std::stringstream类来将字符串转换成整型。

    #include <iostream>
    #include <string> 
    #include <sstream>
    
    int main() {
        std::string str = "2022-05-30 12:12:12";
        std::tm tm = {};
        std::istringstream iss(str);
        iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
        std::time_t timestamp = mktime(&tm);
        
        int timestamp_int = 0;
        std::stringstream stream(std::to_string(timestamp));
        stream >> timestamp_int;
        std::cout << timestamp_int << std::endl;
        
        return 0;
    }

以上代码中,将“2022-05-30 12:12:12”字符串转换成tm结构体对象,再使用mktime()函数将tm对象转换为时间戳。使用std::stringstream类将时间戳转换成整型。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/195797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-02 20:37
下一篇 2024-12-02 20:37

相关推荐

  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python中将字符串转化为浮点数

    本文将介绍在Python中将字符串转化为浮点数的常用方法。在介绍方法之前,我们先来思考一下这个问题应该如何解决。 一、eval函数 在Python中,最简单、最常用的将字符串转化为…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29
  • 解决docker-compose 容器时间和服务器时间不同步问题

    docker-compose是一种工具,能够让您使用YAML文件来定义和运行多个容器。然而,有时候容器的时间与服务器时间不同步,导致一些不必要的错误和麻烦。以下是解决方法的详细介绍…

    编程 2025-04-29
  • 解析js base64并转成unit

    本文将从多个方面详细介绍js中如何解析base64编码并转成unit格式。 一、base64编码解析 在JavaScript中解析base64编码可以使用atob()函数,它会将b…

    编程 2025-04-29
  • 如何优雅地吃葡萄不吐葡萄皮

    要想吃葡萄不吐葡萄皮,首先要学会剥皮,然后就可以慢慢地品尝了。 一、正确的剥皮方法 使用下面的代码可以达到正确的剥皮方法: function peelGrape(grape) { …

    编程 2025-04-29
  • Python如何将字符串1234变成数字1234

    Python作为一种广泛使用的编程语言,对于数字和字符串的处理提供了很多便捷的方式。如何将字符串“1234”转化成数字“1234”呢?下面将从多个方面详细阐述Python如何将字符…

    编程 2025-04-29
  • Python int转二进制字符串

    本文将从以下几个方面对Python中将int类型转换为二进制字符串进行详细阐述: 一、int类型和二进制字符串的定义 在Python中,int类型表示整数,二进制字符串则是由0和1…

    编程 2025-04-29
  • 想把你和时间藏起来

    如果你觉得时间过得太快,每天都过得太匆忙,那么你是否曾经想过想把时间藏起来,慢慢享受每一个瞬间?在这篇文章中,我们将会从多个方面,详细地阐述如何想把你和时间藏起来。 一、一些时间管…

    编程 2025-04-28

发表回复

登录后才能评论