c – 从YYYYMMDDHHMMSS字符串获取time_t的最快方法
发布时间:2020-12-16 09:35:15 所属栏目:百科 来源:网络整理
导读:这是合法的吗?我试图尽可能快地得到time_t给定一个格式为YYYYMMDDHHMMSS的字符串. static time_t ConvertToSecSince1970(char *szYYYYMMDDHHMMSS){struct tm Tm; memset(Tm,sizeof(Tm)); Tm.tm_year = makeInt(szYYYYMMDDHHMMSS + 0,4) - 1900; Tm.tm_mon =
这是合法的吗?我试图尽可能快地得到time_t给定一个格式为YYYYMMDDHHMMSS的字符串.
static time_t ConvertToSecSince1970(char *szYYYYMMDDHHMMSS) { struct tm Tm; memset(&Tm,sizeof(Tm)); Tm.tm_year = makeInt(szYYYYMMDDHHMMSS + 0,4) - 1900; Tm.tm_mon = makeInt(szYYYYMMDDHHMMSS + 4,2) - 1; Tm.tm_mday = makeInt(szYYYYMMDDHHMMSS + 6,2); Tm.tm_hour = makeInt(szYYYYMMDDHHMMSS + 8,2); Tm.tm_min = makeInt(szYYYYMMDDHHMMSS + 10,2); Tm.tm_sec = makeInt(szYYYYMMDDHHMMSS + 12,2); return mktime(&Tm); } 如果我使用以下方法创建TM,它似乎会产生相同的答案: strptime(szYYYYMMDDHHMMSS,"%Y%m%d%H%M%S",&Tm); 我担心tm_yday,tm_wday,tm_isdst,tm_gmtoff,tm_zone很重要.我的日期是UTC,所以我认为gmtoff = 0和tm_zone = 0可能有效. 顺便说一句,这是makeInt: inline int makeInt(const char *p,int size) { const char *endp; int intval = 0; endp = p + size; while (p < endp) { intval = intval * 10 + *p - '0'; p++; } return intval; } 解决方法
mktime()忽略tm_wday和tm_yday字段,并根据其他字段计算它们的新值.这同样适用于BSD扩展tm_gmtoff和tm_zone,除了它们是从本地时区计算的.
但请注意,mktime()使用本地时间而不是UTC,因此如果您的输入日期是UTC,那么您的时区必须设置为UTC. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLite快速入门教程第二集_小布老师作品
- 基于React的仿QQ音乐(移动端)
- 如何在C#中创建非持久性(内存中)http cookie?
- webpack 3 & React 的配置 。
- postgresql – Postgres pgpass windows – 无法正常工作
- ruby-on-rails – Rails accepted_nested_attributes计数验
- cocos2d-iphone – Cocos2d – 视网膜图像无法显示
- xml – 将基于同级值的节点与XPath进行匹配
- ajax – webforms vs asp.net mvc用于单页面应用程序 – 可
- 我不能在线看土豆网的视频,装了土豆提供的flash播放器也不