You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

现代C++/Win32中日期类型与日期API完整列表查询

现代C++/WinRT与Win32环境下的日期时间处理API与类型整理

一、Win32原生核心类型及配套API

这些是Windows系统层面最基础的日期时间操作组件,覆盖从底层时间存储到本地化格式化的全流程:

  • SYSTEMTIME:结构化的日期时间类型,拆分为年、月、日、时、分、秒、毫秒、星期几等字段,适合需要直接操作时间分量或与用户交互的场景。常用配套API:GetSystemTime()(获取UTC时间)、GetLocalTime()(获取本地时间)、SystemTimeToTzSpecificLocalTime()(时区转换)。
  • FILETIME:64位整数类型,以100纳秒为单位记录从1601年1月1日UTC起的时间戳,精度高,常用于文件时间记录、系统事件日志等场景。互转API包括SystemTimeToFileTime()、FileTimeToSystemTime()、GetFileTime()(获取文件的创建/修改/访问时间)。
  • MS-DOS时间:由两个DWORD分别存储日期和时间,是为兼容旧系统保留的类型,配套API有DosDateTimeToFileTime()、FileTimeToDosDateTime(),用于和现代时间类型互转。
  • TIME_ZONE_INFORMATION/DYNAMIC_TIME_ZONE_INFORMATION:存储时区的偏移量、夏令时规则等信息,支持动态时区更新。配套API:GetTimeZoneInformation()、GetDynamicTimeZoneInformation(),用于实现跨时区的时间转换。
  • VT_DATE:OLE自动化标准中的日期时间类型,本质是双精度浮点数——整数部分代表从1899年12月30日起的天数,小数部分代表当天的时间占比。可通过VariantTimeToSystemTime()、SystemTimeToVariantTime()与Win32的结构化时间类型互转。
  • 本地化格式化API:GetDateFormat()、GetTimeFormat()可根据系统区域设置或自定义参数生成符合本地化习惯的日期/时间字符串;FormatMessage()可在系统消息中嵌入格式化的时间内容。

二、C++/WinRT专属组件

专为现代C++设计,无缝整合WinRT框架与标准库特性:

  • winrt::DateTime:在C++/WinRT中是std::chrono::time_point的特化,基于系统时钟,精度为100纳秒,本质和Win32的FILETIME同源,可直接与FILETIME、SYSTEMTIME互转,同时兼容std::chrono的操作逻辑。注意:在C++/CX中该类型语义不同,需区分环境。
  • winrt::Calendar:面向全球化的日期时间操作类,支持多种日历系统(如公历、伊斯兰历、农历等),可直接获取或修改年、月、日、时等时间分量,还能处理时区转换。
  • winrt::DateTimeFormatter:基于Windows全球化引擎,支持按区域设置、自定义格式模板生成本地化的日期时间字符串,无需手动处理本地化规则,适配多语言场景。

三、C++标准库日期时间组件

跨平台且符合C++标准的解决方案,在Windows环境下也能高效使用:

  • C++11基础库:std::chrono核心组件,包括三类时钟:std::chrono::system_clock(对应系统UTC时间,可转换为时间戳)、std::chrono::steady_clock(单调递增时钟,适合测量时间间隔,不受系统时间调整影响)、std::chrono::high_resolution_clock(高精度时钟,通常是前两者的别名);还有duration(表示时间间隔)、time_point(表示具体时间点)两大核心类型。
  • C++20增强库:整合Howard Hinnant的date库功能,新增了一系列日历时间类型,比如std::chrono::year_month_day、std::chrono::hh_mm_ss,可以直接操作年、月、日、时、分、秒等分量,无需手动拆解时间戳;新增时区相关类型std::chrono::zoned_time、std::chrono::time_zone,原生支持跨时区时间转换;同时支持通过std::format直接格式化日期时间字符串。
  • 低版本兼容:如果使用C11或C17标准,可以单独引入Howard Hinnant的date库,获得C++20标准中大部分的日历和时区处理能力。

四、.NET交互场景下的类型

当通过C++/CLI或COM与.NET代码交互时,可使用以下.NET日期时间类型:

  • System.DateTime:表示UTC或本地日期时间,可与Win32的SYSTEMTIME、FILETIME互转。
  • System.DateTimeOffset:包含UTC偏移量的日期时间类型,避免时区歧义,适合跨时区数据传输。
  • System.TimeZoneInfo:提供时区信息查询、时间转换等功能,支持动态时区更新。
  • System.Globalization.DateTimeFormatInfo:用于自定义日期时间的格式化规则,或按指定区域设置生成本地化字符串。

内容的提问来源于stack exchange,提问作者citelao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:40:25