linux 系统函数之 (localtime, localtime_r, strftime)

C++时间处理实战:从time_t到localtime,掌握时间戳与日期转换 时间戳是计算机系统中表示时间点的核心概念,通常以自Unix纪元(1970年1月1日)以来的秒数存储。其原理是将连续的时间离散化为整数,便于存储、计算和跨平台交换。在C/C++编程中,标准库提供了`time()`函数获取当前时间戳,返回`time_t`类型值。这一基础机制为日志记录、性能分析和任务调度等场景提供了统一的时间基准。然而,将时间戳转换为人类可读的日期时间格式时,需使用`localtime()`函数进行转换,该函数会依据系统时区设置将UTC时间戳解析为包含年、月、日等字段的`tm`结构体。值得注意的 阅读详情

                首先介绍一下localtime和localtime_r的区别。

                The  localtime()  function  converts  the calendar time timep to broken-down time representation, expressed relative to the user's specified timezone.  The
       function acts as if it called tzset(3) and sets the external variables tzname with information about the current timezone,  timezone  with  the  difference
       between  Coordinated  Universal  Time (UTC) and local standard time in seconds, and daylight to a nonzero value if daylight savings time rules apply during
       some part of the year.  The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the date and time
       functions.  The localtime_r() function does the same, but stores the data in a user-supplied struct.  It need not set tzname, timezone, and daylight.

               上面是man手册中的解释, localtime 不能同时使用,否则可能会被重写。 localtime_r则是线程安全的。

 

1. localtime

头文件:

            #include <time.h>

 函数定义:

            struct tm *localtime(const time_t *timep);

功能:

             把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是UTC时间 。

参数:

              time_t  从1970-1-1时计算的utc时间。

返回值:

              返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.

示例:               

              time_t tNow =time(NULL);

              time_t tEnd = tNow + 1800;

              struct tm* ptm = localtime(&tNow);

              struct tm* ptmEnd = localtime(&tEnd);

 

2. localtime_r

头文件:

#include <time.h>

函数定义:

struct tm *localtime_r(const time_t *timep, struct tm *result);

功能:

把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是UTC时间 。

参数:

time_t 从1970-1-1时计算的utc时间。 tm 结构体用于获取返回的时间。

返回值:

返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.

示例:

              time_t tNow =time(NULL);

             time_t tEnd = tNow + 1800;

             struct tm ptm = { 0 };

             struct tm ptmEnd = { 0 };

             localtime_r(&tNow, &ptm);

             localtime_r(&tEnd, &ptmEnd);

 

 

3. strftime

头文件:

#include <time.h>

函数定义:

size_t strftime(char *s, size_t max, const char *format,
                       const struct tm *tm);

功能:

strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。

参数:  

我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。
函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。格式化命令说明串strDest中各种日期和时间信息的确切表示方法。格式串中的其他字符原样放进串中。格式命令列在下面,它们是区分大小写的。
%a 星期几的简写
%A 星期几的全称
%b 月份的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年份,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从1到7,星期一为1)
%U 第年的第几周,把星期日作为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号

 

示例:

        struct timeval tv = {0,};
        struct tm      now = {0, };
        char           now_str[32];

        gettimeofday (&tv, NULL);

         localtime_r (&tv.tv_sec, &now);
        strftime (now_str, 32, "%Y/%m/%d-%H:%M:%S", &now);

        

 

 

C++时间处理全解析:从time/localtime到线程安全与跨平台实践 在软件开发中,时间戳处理是基础且关键的技术环节,涉及系统时间获取、时区转换和格式化输出等核心概念。其原理基于计算机系统维护的纪元时间,通过标准库函数转换为人类可读的日历时间。掌握时间处理技术对日志记录、性能分析和任务调度等场景具有重要价值,能确保系统事件的准确排序和跨时区协同。本文聚焦C++中经典的time和localtime函数,深入探讨其线程安全隐患、跨平台差异及2038年问题等实际工程挑战,并提供封装方案与避坑指南,帮助开发者构建健壮的时间处理模块。 阅读详情

相关推荐

Linux系统相关函数总结

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取这些系统信息。除此之外,还会向大家介绍 Linux 系统下的/proc 虚拟文件系统,包括/proc 文件系统是什么以及如何从/proc 文件系统中读取系统、进程有关信息。除了介绍系统信息内容外,本章还会向大家介绍有关系统资源的使用,譬如系统内存资源的申请与使用等。函数,该系统调用可用于获取一些系统统计信息;函数,此函数可用于单独获取Linux。

qq_28576837的博客 1413

Linux C程序时间处理与时区配置实战指南

时间处理是计算机系统编程的基础,其核心在于将时间戳转换为人类可读的格式,并确保不同时区下的时间一致性。在Linux C编程中,这涉及到系统时钟、时区配置以及标准库函数的使用。正确处理时间对于日志记录、定时任务和数据同步等场景至关重要,能有效避免因时区不一致导致的线上事故。本文聚焦于Linux系统时区配置与C语言时间编程,深入解析了localtime_r、gmtime_r等线程安全函数的使用,并探讨了TZ环境变量在动态时区控制中的应用,帮助开发者构建健壮的全球化服务。

weixin_30235225的博客 363

【c/c++】linux时间获取与时间转换函数总结

linux下C/C++时间函数,时间获取函数,时间转换,时间差计算,线程安全的时间转换函数

shuaixio的博客 5989

localtime和localtime_r

C:时间函数 localtime localtime_r

liuyuedechuchu的博客 3935

【自动驾驶】汽车智能驾驶计算芯片

本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。

Mr.Cssust的博客 2631

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

Linux gmtime、gmtime_r、localtime、localtime_r介绍

测试环境:vmware 7 + Redhat5.5,系统时间使用UTC,时区为上海。 1、函数功能介绍 使用man gmtime或man localtime都可以的得到这几个函数的介绍。原型如下: struct tm *gmtime(const time_t *timep); struct tm *gmtime_r(const time_t *timep, struct...

dk_work的博客 3181

python爬取《你好, 李焕英》豆瓣评论数据

# 导入工具包 import requests from bs4 import BeautifulSoup import time import pandas as pd import numpy as np # 请求头 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'} # =

python技巧分享 3456

linux 系统函数之 localtime, localtime_r, strftime

1. localtime 头文件:             #include  函数定义:             struct tm *localtime(const time_t *timep); 功能:              把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是

qq_28090573的博客 9070

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4864

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7274

strftime, localtime_r(替代localtime), gettimeofday(替代ftime)

一、        size_t strftime(char *s, size_t max, const char *format,                            const struct tm *tm);        The strftime() function returns the number of characters placed in  the

安子自语 7762

淘宝电商产品价格官方防爬取采集设计机制,如何破?|淘宝电商API数据采集看完你也会!

然而,随着电子商务的蓬勃发展,涌现出大量的第三方工具和应用,试图通过采集淘宝电商产品价格等信息来进行数据分析和竞争优势的获取。为了维护市场秩序和保护商家权益,淘宝采取了一系列的防爬取设计机制,以阻止非授权的数据采集行为。为了确保数据的准确性和及时性,淘宝采取了多层次的防爬取机制,以限制未经授权的数据采集。其它的情况,比如淘宝首页、淘宝关键词商品搜索结果页面、商品详情页面,都是正常展示,未实现加密;也可以使用【tesseract ocr识别】指令,这个是免费无限使用的;【淘宝商品搜索结果页面-本地截图】

TinagirlAPI的博客 1385

Linux时间操作核心函数解析:从time、localtime到mktime的实战指南

在计算机系统中,时间处理是基础且关键的技术领域,涉及系统时钟、时区转换和日历计算等核心原理。理解时间体系对于开发高性能、跨时区应用具有重要价值,尤其在日志记录、定时任务和分布式系统等场景中不可或缺。本文聚焦Linux环境下时间操作的核心函数,深入解析time、localtime和mktime等函数的工作原理与使用陷阱。通过探讨时间戳获取、本地化转换及反向编码等技术细节,并结合高并发优化和时区处理等实战经验,帮助开发者掌握正确处理时间问题的关键技能,提升代码的健壮性和可维护性。

weixin_30402231的博客 353

创建 Fiori Space 时看不到传输请求的根因与排查路径

摘要: 在创建Fiori Space时,若Transport字段下拉列表为空,通常是因为系统未找到符合要求的传输请求。主要原因是: 请求类型不匹配:需使用Customizing request而非Workbench request。 用户权限问题:当前用户需在请求下有可用的task。 客户端或系统不一致:请求需在当前客户端和正确系统(如后端)中创建。 解决方法: 在当前客户端和系统中新建Customizing request,确保包含用户task。 检查是否为前后端分离架构,确保请求创建在正确的系统。 验证

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 107

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

time 格式化 linux,Linux下的Time处理

HTTP协议中,有很多机制都和Time有关,这里先撇开缓存控制及过期机制,就拿Date开刀。Date的格式大致如下:Tue, 21 Jul 2015 21:19:41 GMT好,现在问题就来了,如何得到这个字符串?先别急,本文将会对Linux下Time的格式化以及转换做一下解读。0x00 一切的起点——time_t从某个纪元开始time_t这个概念就存在了,这里不谈什么历史故事,感兴趣的可以自行w...

weixin_42667269的博客 378

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux系统编程进阶:文件IO流操作、二进制读写与时间管理

摘要:本文深入解析Linux标准IO库的高级操作,重点对比fgets/fputs与fread/fwrite的适用场景:前者用于文本行处理(保留换行符,防止缓冲区溢出),后者适合二进制数据块传输。详细讲解文件流定位机制(fseek/ftell/rewind)实现随机访问,并系统梳理Linux时间处理函数(time_t与struct tm转换)。通过文本/二进制文件拷贝范例,强调正确选择IO函数的重要性,为开发健壮应用提供实践指导。

m0_69717451的博客 317

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux时间函数选型与踩坑:从时钟语义到格式转换

在Linux系统编程中,time_t、timespec、gettimeofday、clock_gettime等时间接口常被混用,根源是墙上时间、单调时间、CPU时间与定时器时间语义不同。墙上时间可被校时调整,适合日志和持久化;单调时钟不受校时影响,适合耗时统计、超时控制和周期任务。理解clock_gettime的clock id选择、tv_nsec精度、localtime_r线程安全、strftime/strptime格式转换与2038问题,可降低时间戳错乱、定时任务漂移等生产事故。相关能力最终落到Linu

weixin_34116482的博客 51

Linux时间函数详解:从time_t到clock_gettime的选型与避坑指南

时间处理是Linux下C/C++开发中最基础也最容易出错的环节。无论是嵌入式板卡还是高并发服务,开发者常常混淆time_t、struct timespec与struct timeval的适用场景,或在时区、时钟源和精度上踩坑。理解墙钟时间与单调时钟的本质区别,是写出健壮代码的前提:日志记录用CLOCK_REALTIME,性能统计用CLOCK_MONOTONIC,涉及休眠则需CLOCK_BOOTTIME。同时,时间戳与可读字符串的互转、mktime的时区语义、strftime格式化技巧,以及多线程下的gmti

weixin_32822843的博客 212

Unix/Linux时间转换四层模型与高精度实践指南

在系统编程中,时间处理是连接硬件滴答、内核调度、进程超时与人类可读日志的核心能力。其本质是理解`time_t`(Unix纪元秒数)与`struct tm`(时区绑定的日期结构)之间的映射原理,掌握`CLOCK_REALTIME`与`CLOCK_MONOTONIC`在精度、稳定性及NTP校正影响下的技术分野。这种转换不仅决定日志一致性、定时任务可靠性与分布式事件排序,更直接影响高频交易、嵌入式固件和跨时区服务的工程鲁棒性。本文聚焦`localtime_r`线程安全陷阱、`strftime`格式化风险及`/us

weixin_29698641的博客 284

Linux时间函数time()、ctime()、ctime_r()、localtime()、localtime_r()、asctime()、strftime()的转换关系

上面这个图就是它们所有函数的关系转换,比较清晰,不需要太多文字描述。 下面是它们的代码实现过程: #include&lt;stdio.h&gt; #include&lt;unistd.h&gt; #include&lt;time.h&gt; #include&lt;error.h&gt; #include &lt;stdlib.h&gt; int main(void) { t...

DynastyDoubleH的博客 9739

Linux time函数(mktime,time,ctime,localtime,gmtime,asctime,strftime)

mktime(将时间结构数据转换成经过的秒数) 相关函数time,asctime,gmtime,localtime 表头文件#include <time.h> 定义函数time_t mktime(strcut tm * timeptr); 函数说明:mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。 返回值:返回经过的秒数。 范例 /* 用time()取得时间(秒数),利用localtime()

$好记性还是要多记录$ 1426

Linux时间函数总结

Linux时间函数time()、ctime()、ctime_r()、localtime()、localtime_r()、asctime()、strftime()的转换关系_半夜摘星星的博客-优快云博客 上面这个图就是它们所有函数的关系转换,比较清晰,不需要太多文字描述。 下面是它们的代码实现过程: #include<stdio.h> #include<unistd.h> #include<time.h> #include<error.h> #

llzhang_fly的博客 948

Linux C编程时间获取全解析:从time()到clock_gettime()的实战指南

在计算机编程中,时间处理是基础且关键的技术概念,它涉及系统调用、时钟源和数据结构等核心原理。理解时间获取机制对于确保程序逻辑正确性和数据一致性具有重要技术价值,尤其在日志记录、性能分析和分布式系统等应用场景中。本文将深入探讨Linux C环境下时间操作的实现细节,涵盖从经典的time()函数到高精度的clock_gettime()方法,并解析时间格式转换与线程安全处理。通过掌握这些技术,开发者能够编写出健壮可靠的代码,有效应对时区处理和多线程环境下的常见陷阱。

weixin_30753873的博客 398
上一篇: linux 系统函数之 (dirname, basename)
下一篇: ssh 免密钥登陆
peter_cloud
博客等级 码龄15年 24粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值