在Windows C ++中将字符串识别的语言环境解析为日期

时间:2016-01-11 23:14:20

标签: c++ windows

我正在使用Windows C ++代码:

我试图解析由3个 rd 派对软件返回的代表日期的字符串,但我想让解析取决于所使用的语言环境。现在,我回来的日期采用以下格式:" mm-dd-YYYY tt:ss A",但如果我将语言环境切换为加拿大,那么字符串I& #39; m回来是" dd-mm-YYYY tt:ss A"

如您所见,交换了月份和日期。有没有办法检索当前语言环境使用的日期格式?或者更好的是,有没有办法根据用户的语言环境以不同的方式解析字符串?

#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
#include <ctime>
#include <sstream>

int _tmain(int argc, _TCHAR* argv[])
{
    // Region 1: Go from current time to locale-specific date / time.
    std::time_t ct = std::time(nullptr);
    std::tm tm = *std::localtime(&ct);

   // Save the time in a stringstream to be later used as input
    std::stringstream time_str;
    time_str.imbue(std::locale(""));
    time_str << std::put_time(&tm, "%x %X");

   // print the saved stringstream
    std::cout << std::locale("").name().c_str() << ": " << time_str.str() << "\n";

    // Region 2: Parse from a local-specific date and time string to time (Parsing is failing)
    std::tm t = {};
    std::istringstream iss(time_str.str().c_str());
    iss.imbue(std::locale(""));
    iss >> std::get_time(&t, "%x, %X"); // I would expect this to parse my string above correctly.
    if (iss.fail()) {
        std::cout << "Parse failed\n";
    }
    else {
        std::cout << std::asctime(&t) << '\n';
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

var count = function(text) { var charLength = text.length; var wordCount = text.split(' ').length; return { 'charLength': charLength, 'wordCount': wordCount }; }; 中有一个std::get_time。根据您的需要,您可以使用其<iomanip>转换来阅读区域设置的标准日期格式。

如果这不符合您的格式,您可能需要查看time_get方面。这有一个%x成员函数来告诉你当前语言环境的首选顺序(mdy,dmy,ymd或ydm)。然后,您可以使用它来选择输入的格式(如果您使用date_orderget_time进行阅读,请选择格式字符串。)

答案 1 :(得分:0)

您没有对put_time()get_time()

使用相同的格式

对于put_time(),您使用了"%x %X",而对于get_time(),您使用了"%x, %X"

希望这有帮助