C/C++时间相关操作 SYSTEMTIME time_t 字符串的相互转换

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

****************** 一、 时间相关 ******************
SYSTEMTIME
time_t 是长整型,long int
tm 是一个结构体 time.h
localtime
mktime
GetLocalTime(&sysTime ); 获取当前时间 SYSTEMTIME类型
CTime t = GetCurrentTime(); MFC
****************** 二、 时间转换函数 ******************
① time_t与SYSTEMTIME之间的相互转换
/*
**time_t转SYSTEMTIME
*/
SYSTEMTIME Time_tToSystemTime(time_t t)
{
tm temptm = *localtime(&t);
SYSTEMTIME st = {1900 + temptm.tm_year,
1 + temptm.tm_mon,
temptm.tm_wday,
temptm.tm_mday,
temptm.tm_hour,
temptm.tm_min,
temptm.tm_sec,
0};
return st;
}
/*
**SYSTEMTIME转time_t
*/
time_t SystemTimeToTime_t( const SYSTEMTIME& st )
{
tm temptm = {st.wSecond,
st.wMinute,
st.wHour,
st.wDay,
st.wMonth - 1,
st.wYear - 1900,
st.wDayOfWeek,
0,
0};

return mktime(&temptm);

}

② 字符串与SYSTEMTIME之间的相互转换
/*
**SYSTEMTIME 转 字符串
*/
SYSTEMTIME sysTime;
GetLocalTime(&sysTime );
time_t now;
struct tm *today;
now = time( (long*)&sysTime );
char tmpbuf[128];
today = localtime( &now );
strftime(tmpbuf, 128, “%H:%M:%S\n “, today );

/*
** 字符串 转 SYSTEMTIME
*/

③ 字符串与time_t之间的相互转换
/*
**time_t 转 字符串
*/
time_t now;
struct tm *today;
now = time( &now );
char tmpbuf[128];
today = localtime( &now );
strftime(tmpbuf, 128, “%H:%M:%S\n “, today );

/*
** 字符串 转 time_t
*/
****************** 三、 不同库的时间相关函数 ******************
① 、标准库(unix时间相关)#include < time.h >
1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;
time_t timegm(struct tm *tm);
2.mktime使用时区信息
time_t mktime(struct tm *tm);
timelocal 函数是GNU扩展的与posix函数mktime相当
time_t timelocal (struct tm *tm);
3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;
struct tm * gmtime(const time_t *clock);
4.localtime使用时区信息
struct tm * localtime(const time_t *clock);
5.time获取时间,stime设置时间
time_t t;
t = time(&t);
6.stime其参数应该是GMT时间,根据本地时区设置为本地时间;
int stime(time_t *tp)

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t
看看你的系统是否有time_t64,它能表示更大的时间范围

② 、Windows时间相关
CTime MFC类
CTime t = GetCurrentTime();
SYSTEMTIME 结构包含毫秒信息
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
SYSTEMTIME t1;
GetSystemTime(&t1)
CTime curTime(t1);
WORD ms = t1.wMilliseconds;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);

在time.h中的_strtime() //只能在windows中用
char t[11];
_strtime(t);
puts(t);

如何设定当前系统时间—windows
SYSTEMTIME m_myLocalTime,*lpSystemTime;
m_myLocalTime.wYear=2003;
m_myLocalTime.wMonth=1;
m_myLocalTime.wDay=1;
m_myLocalTime.wHour=0;
m_myLocalTime.wMinute=0;
m_myLocalTime.wSecond=0;
m_myLocalTime.wMilliseconds=0;
lpSystemTime=&m_myLocalTime;
if( SetLocalTime(lpSystemTime) ) //此处换成 SetSystemTime( )也不行
MessageBox(“OK !”);
else
MessageBox(“Error !”);

SYSTEMTIME m_myLocalTime,*lpSystemTime;
m_myLocalTime.wYear=2003;
m_myLocalTime.wMonth=1;
m_myLocalTime.wDay=1;
lpSystemTime=&m_myLocalTime;
if( SetDate(lpSystemTime) ) //此处换成 SetSystemTime( )也不行
MessageBox(“OK !”);
else
MessageBox(“Error !”);

****************** 四、 验证程序 ******************
****************** 五、 待整理 ******************


用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
clock_t clock ( void );

include

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

据说tc2.0的time结构含有毫秒信息

include

include

time 是一个结构体,, 其中成员函数 ti_hund 是豪秒。。。上程序可以在tc2.0运行

这个是windows里面常用来计算程序运行时间的函数;
DWORD dwStart = GetTickCount();
//这里运行你的程序代码
DWORD dwEnd = GetTickCount();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位
这个函数只精确到55ms,1个tick就是55ms。


timeGetTime()基本等于GetTickCount(),但是精度更高
DWORD dwStart = timeGetTime();
//这里运行你的程序代码
DWORD dwEnd = timeGetTime();
则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

****************** l六、 说明 ******************
文中很多资料是在网上查询所得,记录在此方便查看,也转载了部分别的大神的文文,谨在此说明!

Linux C 获取当前日期时间的封装 使用gettimeofday可以获取到从epoch(1970-1-1 00:00:00)开始的年月日时分秒,但是有时候希望获取到精确到微秒的时间,所以将localtime_r封装进去用于获取微秒,具体代码如下。 #include <stdio.h> #include <string.h> #include <time.h> #include <sys/ti... 阅读详情

相关推荐

Linux与Windows时间戳获取全解析:从系统调用到Qt跨平台实践

时间戳作为记录事件发生时刻的数字标识,在软件开发中扮演着核心角色。其原理基于从特定纪元(如Unix纪元)开始计算的时间单位累加,为日志记录、性能分析和数据同步提供统一的时间基准。在技术实现上,区分墙上时钟(如CLOCK_REALTIME)与单调时钟(如CLOCK_MONOTONIC)至关重要,前者反映日历时间但可能被调整,后者严格递增,专为耗时测量设计,这是确保时序逻辑正确的关键。对于跨平台开发,Linux通过clock_gettime系统调用提供灵活的高精度时间获取,而Windows则依赖QueryPer

weixin_33862993的博客 353

time_t与SYSTEMTIME相互转换

* **time_t2SYSTEMTIME */ SYSTEMTIME TimetToSystemTime(time_t t) { FILETIME ft; SYSTEMTIME pst; LONGLONG nLL = Int32x32To64(t, 10000000) + 116444736000000000; ft.dwLowDateTime = (DWORD)nLL; ft.dwHighDateTime = (DWORD)(nLL >&g

Keivin 1488

Windows Mobile下SQLite的Native C++轻量封装实践

SQLite作为嵌入式场景中最主流的轻量级关系型数据库,以其零配置、事务安全、单文件部署等特性,广泛应用于资源受限的工业终端设备。其底层基于C语言实现,天然适配Native开发,但在Windows Mobile这类已终止支持的嵌入式平台中,需直面ARMv4T指令集兼容、wchar_t编码转换、内存确定性管理及线程安全模型重构等核心挑战。本文聚焦SQLite在WM平台的本地化落地,深入解析C API直接封装、源码级编译适配、BOM敏感字符串处理、CriticalSection双重加锁等关键技术路径,为遗留系统

dianlu5775的博客 372

FILETIME, SYSTEMTIMEtime_t 相互转换

FILETIME, SYSTEMTIMEtime_t 相互转换  #####SYSTEMTIME 与 FILETIME相互转换##### 可以使用系统函数FileTimeToSystemTime(&ftcreate,&stcreate);   参数:(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) 说明 根据一个FILETIME

zjnig711的信息仓库 6908

Windows中的时间(SYSTEMTIME和FILETIME)

上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间和UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEMTIME),CRT中的time_t时间在SDK中对应的为文件时间(FILETIME),那个"特殊时刻"也变成1

Road Ahead 5万+

C++中如何使用SYSTEMTIME获取系统时间并格式化为字符串

结构体通常与Windows API一起使用来获取系统时间,但直接将其格式化为字符串并不是最直接的方法。通常,更简便和跨平台的方法是使用标准库中的。这个方法更加简洁,并且不需要处理时区转换的复杂性,因为它直接使用了系统本地时间。头文件来处理时间和日期。然而,如果你确实需要使用。

学无止尽,谨言慎行! 1848

SYSTEMTIMEtime_t的用法例子

#include <stdio.h> #include <time.h> #include <windows.h> int main() { SYSTEMTIME s; GetLocalTime(&s); printf("It's %d/%d/%d %02d:%02d:%02d now.", s.wYear, s.wMonth, s.wDay, s.wHour, s.wMinute, s.wMinute); printf("\nAnd i

david412306524的专栏 2228

C/C++获取时间时间格式转换

介绍基础概念,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。

yuanjie92的专栏 3万+

C/C++与系统时间相关的函数(windows)

c++ 如何获取系统时间2008-04-28 15:34//方案— 优点:仅使用C标准库;缺点:只能精确到秒级#include #include int main( void ){time_t t = time(0);char tmp[64];strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );puts( t

Tony_Wong的专栏 731

(转)C/C++中的日期和时间 time_t与struct tm转换

(转)C/C++中的日期和时间 time_t与struct tm转换 摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。 关键字:UTC(世界标准时间),Calendar Time(日历时间),ep

技术改变生活 2498

C语言常用时间相关函数

首先讲一下#include <time.h>和#include <sys/time.h>的区别,前者是C99标准库函数,后者是Linux系统函数,如果Windows平台装了MinGW(Minimalist GNU for Windows)工具也是可以使用<sys/time.h>的,<sys/time.h>中调用了<time.h>。 获取时间-time 函数原型: time_t time(time_t *timer) 变量time_t实际上是l

qq_36973838的博客 2228

vc ++ 常用CTime相关

CTime time time_t

堡哥的博客 2064

c/c++ 时间日期函数

时间日期分类: 协调世界时UTC,为世界标准时间,也就是大家所熟知的格林威治标准时间。中国内地的时间与UTC的时差为+8,也就是UTC+8。 日历时间:是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。 时钟计时单元。一个时钟计时单元的时间长短是由CPU控制的,但它不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。在标准C/C++中,最小的计时单位是一毫秒。程序运行时间:C/C+

qiuyuan_1的博客 1083

MFC操纵时间的常用方法

1定义一个CTime类对象 CTime time; 2得到当前时间 time = CTime::GetCurrentTime(); 3 GetYear(),GetMonth(), GetDay(), GetHour(), GetMinute(), GetSecond(), G

把握自己。 2514

VC++中获取文件最后修改时间的Windows API实现与优化

C++编程中,文件操作是基础且关键的技术环节,尤其在Windows平台开发时,对文件元数据的精准读写直接影响程序的可靠性与性能。文件最后修改时间作为核心元数据,其获取原理涉及操作系统底层的时间戳管理机制,通常以高精度UTC格式存储。从技术价值看,高效获取此时间戳是实现文件同步、版本监控、增量备份等功能的基石,广泛应用于构建工具、资源管理器和监控系统等场景。本文聚焦于VC++开发环境,深入剖析如何通过Windows API的GetFileTime函数,结合FILETIME结构体与UTC时间转换,实现一个健壮

weixin_34128237的博客 445

VC时间

1.使用CTime类     CString str;    //获取系统时间    CTime tm;    tm=CTime::GetCurrentTime();    str=tm.Format("现在时间是%Y年%m月%d日 %X");    MessageBox(str,NULL,MB_OK);   2: 得到系统时间日期(使

行者无疆 Happy Programming! 652

VC++时间函数全解析:从基础API到高精度计时实战指南

在Windows平台C++开发中,时间处理是基础且关键的技术环节,涉及系统调用、性能优化与资源管理。其核心原理在于操作系统提供的不同精度时间源,如系统时钟、性能计数器等,它们共同构成了时间函数生态。掌握这些原理的技术价值在于能够实现精准的性能剖析、稳定的定时任务以及正确的日志记录,直接影响软件的可靠性与效率。应用场景广泛,包括但不限于游戏开发中的帧率控制、服务器程序的超时管理、以及系统工具中的文件时间操作。针对VC++开发中常见的电脑vc++库自检需求与vc++基础教程学习路径,本文将深入对比C标准库、Wi

weixin_30512965的博客 293

C++预处理器深度解析:从宏定义到条件编译的工程实践

预处理器是C/C++编译流程中的关键环节,它在编译器进行语法分析前对源代码进行文本处理。其核心原理是通过宏定义、文件包含和条件编译等指令,对源代码进行文本替换和组织,生成可供编译器直接处理的翻译单元。这一机制在工程实践中具有重要价值,能够实现跨平台代码管理、编译期配置和代码生成等功能。在C++开发中,预处理器常用于实现头文件守卫、调试日志系统和平台抽象层等场景。例如,通过 #define 宏定义和 #ifdef 条件编译指令,开发者可以灵活控制不同构建配置下的代码行为,而 __FILE__ 和 __LINE

278
码农妹纸
博客等级 码龄12年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值