我正在使用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;
}
答案 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_order
或get_time
进行阅读,请选择格式字符串。)
答案 1 :(得分:0)
您没有对put_time()
和get_time()
对于put_time(),您使用了"%x %X"
,而对于get_time(),您使用了"%x, %X"
希望这有帮助