加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

支持区域设置的字符串解析到Windows C中的日期

发布时间:2020-12-14 05:38:30 所属栏目:Windows 来源:网络整理
导读:我在使用 Windows C代码: 我正在尝试解析由代表日期的第三方软件返回的字符串,但我想使解析依赖于所使用的语言环境.现在,我回来的日期是以下格式:“mm-dd-YYYY tt:ss A”,但是如果我将语言环境切换到类似加拿大的地方,那么我要回来的字符串是“dd” -mm-Y
我在使用 Windows C代码:

我正在尝试解析由代表日期的第三方软件返回的字符串,但我想使解析依赖于所使用的语言环境.现在,我回来的日期是以下格式:“mm-dd-YYYY tt:ss A”,但是如果我将语言环境切换到类似加拿大的地方,那么我要回来的字符串是“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 failedn";
    }
    else {
        std::cout << std::asctime(&t) << 'n';
    }
    return 0;
}

解决方法

< iomanip>中有一个 std::get_time.根据您的需要,您可以使用其%x转换来读取区域设置的标准日期格式.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读