c++11 标准模板(STL)本地化库 - 平面类别(time_get) - 从输入字符序列中解析时间/日期值到 std::tm 中(一)

本文主要是介绍c++11 标准模板(STL)本地化库 - 平面类别(time_get) - 从输入字符序列中解析时间/日期值到 std::tm 中(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本地化库

本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C++ 标准库的其他组件的行为。

平面类别

从输入字符序列中解析时间/日期值到 std::tm 中

std::time_get
template<

    class CharT,
    class InputIt = std::istreambuf_iterator<CharT>

> class time_get;

类模板 std::time_get 封装日期和时间分析规则。 I/O 操纵符 std::get_time 用 I/O 流的 locale 的 std::time_get 平面转换文本输入为 std::tm 对象。

继承图

类型要求

- InputIt 必须满足遗留输入迭代器 (LegacyInputIterator) 的要求。

特化

标准库提供二个孤立(独立于本地环境的)全特化和二个部分特化:

定义于头文件 <locale>

std::time_get<char>分析日期和时间的窄字符串表示
std::time_get<wchar_t>分析日期和时间的宽字符串表示
std::time_get<char, InputIt>用定制输入迭代器分析日期和时间的窄字符串表示
std::time_get<wchar_t, InputIt>用定制输入迭代器分析日期和时间的宽字符串表示

另外, C++ 程序中构造的每个 locale 对象都实装这些特化的其自身(本地环境限定)版本。

成员类型

成员类型定义
char_typeCharT
iter_typeInputIt

成员函数

(构造函数)

构造新的 time_get 平面
(公开成员函数)

(析构函数)

销毁 time_get 平面
(受保护成员函数)

date_order

调用 do_date_order
(公开成员函数)

get_time

调用 do_get_time
(公开成员函数)

get_date

调用 do_get_date
(公开成员函数)

get_weekday

调用 do_get_weekday
(公开成员函数)

get_monthname

调用 do_get_monthname
(公开成员函数)

get_year

调用 do_get_year
(公开成员函数)

get

(C++11)

调用 do_get
(公开成员函数)

成员对象

static std::locale::id id

locale 的 id
(公开成员对象)

受保护成员函数

do_date_order

[虚]

获得偏好的日、月、年顺序
(虚受保护成员函数)

do_get_time

[虚]

从输入流释出时、分、秒
(虚受保护成员函数)

do_get_date

[虚]

从输入流输出月、日以及年
(虚受保护成员函数)

do_get_weekday

[虚]

从输入流释出星期的日名
(虚受保护成员函数)

do_get_monthname

[虚]

从输入流释出月名
(虚受保护成员函数)

do_get_year

[虚]

从输入流释出年份
(虚受保护成员函数)

do_get

[虚] (C++11)

从输入流释出日期/时间组分,按照指定格式
(虚受保护成员函数)

继承自 std::time_base

类型定义
dateorder日期顺序枚举类型,定义值 no_orderdmymdyymdydm

调用示例 windows

 

#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
#include <vector>
#include <Windows.h>std::vector<std::wstring> locals;BOOL CALLBACK MyFuncLocaleEx(LPWSTR pStr, DWORD dwFlags, LPARAM lparam)
{locals.push_back(pStr);return TRUE;
}std::string stows(const std::wstring& ws)
{std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";setlocale(LC_ALL, "chs");const wchar_t* _Source = ws.c_str();size_t _Dsize = 2 * ws.size() + 1;char *_Dest = new char[_Dsize];memset(_Dest, 0, _Dsize);wcstombs(_Dest, _Source, _Dsize);std::string result = _Dest;delete[]_Dest;setlocale(LC_ALL, curLocale.c_str());return result;
}int main()
{EnumSystemLocalesEx(MyFuncLocaleEx, LOCALE_ALTERNATE_SORTS, NULL, NULL);for (std::vector<std::wstring>::const_iterator str = locals.begin();str != locals.end(); ++str){std::tm t = {};std::istringstream istringstream("2024-04-27 23:12:34");istringstream.imbue(std::locale(stows(*str)));istringstream >> std::get_time(&t, "%Y-%m-%d %H:%M:%S");std::cout << stows(*str) << "   ";if (istringstream.fail()){std::cout << "Parse failed" << std::endl;}else{std::cout << std::put_time(&t, "%c") << std::endl;}}return 0;
}

输出

de-DE_phoneb   04/27/24 23:12:34
es-ES_tradnl   04/27/24 23:12:34
hu-HU_technl   04/27/24 23:12:34
ja-JP_radstr   04/27/24 23:12:34
ka-GE_modern   04/27/24 23:12:34
x-IV_mathan   04/27/24 23:12:34
zh-CN_phoneb   04/27/24 23:12:34
zh-CN_stroke   04/27/24 23:12:34
zh-HK_radstr   04/27/24 23:12:34
zh-MO_radstr   04/27/24 23:12:34
zh-MO_stroke   04/27/24 23:12:34
zh-SG_phoneb   04/27/24 23:12:34
zh-SG_stroke   04/27/24 23:12:34
zh-TW_pronun   04/27/24 23:12:34
zh-TW_radstr   04/27/24 23:12:34

这篇关于c++11 标准模板(STL)本地化库 - 平面类别(time_get) - 从输入字符序列中解析时间/日期值到 std::tm 中(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942379

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加