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

时间:2015-11-27 07:15:01

标签: c++ date c++11

我有这样的日期字符串:

"2015-11-27"

从他们那里我想确定星期几。

这个(live sample)就是我使用<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中是否有更规范的方法可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以使用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处查看它。