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

ops/2024/12/22 21:02:50/

本地化库

本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 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


http://www.ppmy.cn/ops/26177.html

相关文章

深入剖析Tomcat(五) 剖析Servlet容器并实现一个简易Context与Wrapper容器

上一章介绍了Tomcat的默认连接器&#xff0c;后续程序都会使用默认连接器。前面有讲过Catalina容器的两大块内容就是连接器与Servlet容器。不同于第二章的自定义丐版Servlet容器&#xff0c;这一章就来探讨下Catalina中的真正的Servlet容器究竟长啥样。 四种容器 在Catalina中…

短视频生成背景文字工具(前端工具)

过年这两天有些无聊就刷刷抖音&#xff0c;刷着刷着自己也蠢蠢欲动&#xff0c;想发上几个&#xff0c;可是却找不到合适自己的模板。由于个人喜欢一些古诗文之类的&#xff0c;所以自己简单的编写了一个小工具&#xff0c;如下图&#xff1a; 当设置好了之后&#xff0c;将浏…

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

香港BGP服务器和香港双线服务器的区别

香港BGP服务器和香港双线服务器在网络架构和连接方式上有一些区别&#xff0c;主要体现在以下几个方面&#xff1a; 网络连接方式&#xff1a; 香港BGP服务器采用BGP(边界网关协议)技术&#xff0c;通常连接到多个不同的网络服务提供商(ISP)&#xff0c;并通过BGP协议动态选择最…

图计算浅谈:主流图存储引擎/图搜索算法

在数据关联与复杂网络越来越突显其价值的今日&#xff0c;图数据库&#xff08;Graph Database&#xff09;逐渐成为在大数据领域不可或缺的一部分。图数据库强调数据项之间的关系&#xff0c;它不仅能存储大量的顶点&#xff08;Vertex&#xff09;和边&#xff08;Edge&#…

QT - 创建Qt Widgets Application项目

在Qt中结合OpenGL使用&#xff0c;可以创建一个Qt Widgets应用程序项目。在创建项目时&#xff0c;您可以选择使用OpenGL模板来生成一个已经集成了OpenGL的项目。这个模板会自动帮助您集成OpenGL和Qt&#xff0c;并生成一个基本的OpenGL窗口。您可以在这个窗口中进行OpenGL的开…

618家用洗地机选择哪个牌子比较好?清洁力强的家用洗地机推荐

随着科技的不断发展,智能家居设备在人们生活中扮演着越来越重要的角色。其中,洗地机凭借着高效便捷的清洁能力,备受广大消费者的青睐。那么,到底哪款洗地机性价比最高,使用体验又如何呢?本文将为您详细解析选购洗地机时需要关注的重点因素,帮助您找到最适合自己的产品。 618挑…

Seata分布式原理及优势

原理 1、长事务分成多个短事务 2、每个业务库都有自己的undo_log表&#xff1a;业务sql操作之前和之后的镜像数据。回滚的之后恢复数据&#xff0c;正常成功后 异步删除 优势 锁资源时间短&#xff0c;效率高 涉及到的表 Tc global_table 全局 xid branch_table 分支的信息…