C++11中日期字符串的工作日

Weekday from date string in C++11

本文关键字:工作日 字符串 日期 C++11      更新时间:2023-10-16

我有这样的日期字符串:

"2015-11-27"

我想从中确定一周中的哪一天。

这是我使用<ctime>:的方法

int dayOfWeek(std::string date){
    int y, m, d; char c;
    std::stringstream(date) >> y >> c >> m >> c >> d;
    std::tm t = {0,0,0,d,m-1,y-1900};
    std::mktime(&t);
    return t.tm_wday;
}

但我想知道在C++11中是否有更规范的方法来实现这一点?

您可以使用std:get_time()将这样的字符串转换为std::tm

以下程序是在上发布的程序的修改版本http://en.cppreference.com/w/cpp/locale/time_get.

std::get_time()的有效格式说明符可以在http://en.cppreference.com/w/cpp/io/manip/get_time.

#include <iostream>
#include <sstream>
#include <string>
#include <locale>
#include <ctime>
#include <iomanip>
int main()
{
    std::string input = "2015-11-27";
    std::tm t = {};
    std::istringstream ss(input);
    ss >> std::get_time(&t, "%Y-%m-%d");
    std::mktime(&t);
    std::cout << std::asctime(&t);
}

看到它在工作http://ideone.com/xAEjsr.