如何優雅地將字元串轉成時間戳

一、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/zh-tw/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

發表回復

登錄後才能評論