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

相关文章

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库