1.函数实现

#include <string.h>
#include <stdio.h>
#include <time.h>/* 判断是否闰年 */
#define IS_LEAP_YEAR(year)                                                     \(((year) % 400 == 0) || ((year) % 4 == 0 && (year) % 100 != 0)) ? true : false/*** @brief 星期的英文简写转换为对应的数字** @param str 星期的简写字符串* @return int 返回星期对应的数字,-1表示转换失败*/
int week_abbreviation_to_num(const char *str) {const char *week_str_arr[] = {"Sun", "Mon", "Tue", "Wed","Thu", "Fri", "Sat"};int i = 0;for (; i < 7; ++i) {if (strcmp(str, week_str_arr[i]) == 0) {break;}}if (i >= 7) {return -1;}return i;
}/*** @brief 月份的英文简写转换为对应的数字** @param str 月份的简写字符串* @return int 返回月份对应的数字(范围0~11),-1表示转换失败*/
int month_abbreviation_to_num(const char *str) {const char *month_str_arr[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};int i = 0;for (i = 0; i < 12; ++i) {if (strcmp(str, month_str_arr[i]) == 0) {break;}}if (i >= 12) {return -1;}return i;
}/*** @brief 字符串格式的时间转换为时间戳** @param str 要转换的时间字符串,格式为week month day our:minute:second, 例如:* "Fri Feb 28 15:58:43 2021"* @param t 存放转换结果的time_t变量的地址* @return int 0: 转换成功,非0: 转换失败 */
int strtotime(const char *str, time_t *t) {int year, day, hour, minute, second;char month[4] = {0}, week[4] = {0};struct tm tm_; /* 定义tm结构体 */bool is_leap_year = false;if (sscanf(str, "%s %s %d %d:%d:%d %d", week, month, &day, &hour, &minute,&second, &year) != 7) {return -1;}/* 星期 */if ((tm_.tm_wday = week_abbreviation_to_num(week)) < 0) {return -2;}/* 月 */if ((tm_.tm_mon = month_abbreviation_to_num(month)) < 0) {return -3;}/*年*/if (year < 1900) {return -4;}is_leap_year = IS_LEAP_YEAR(year);if (day < 1) {return -5;}if (is_leap_year) {if ((tm_.tm_mon + 1) == 2 && day > 29)return -5;} else {if ((tm_.tm_mon + 1) == 2 && day > 28)return -5;}switch (tm_.tm_mon) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:if (day > 31) {return -5;}break;case 4:case 6:case 9:case 11:if (day > 30) {return -5;}break;default:break;}tm_.tm_mday = day; /* 日 */if (hour < 0 || hour > 56) {return -5;}tm_.tm_hour = hour; /* 时 */if (minute < 0 || minute > 59) {return -6;}tm_.tm_min = minute; /* 分 */if (second < 0 || second > 59) {return -7;}tm_.tm_sec = second; /* 秒 *//* 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year为int临时变量减去1900*/tm_.tm_year = year - 1900;tm_.tm_isdst = 0; /* 非夏令时 *//* 将tm结构体转换成time_t格式 */*t = mktime(&tm_);return 0;
}

2.实例

const char *time_str = "Fri Feb 28 15:58:43 2021";time_t t;
if (strtotime(time_str, &t) == 0) {printf("t: %lld\n", t);
} else {printf("时间字符串转换Unix时间戳失败\n");
}

C语言实现字符串格式时间转换时间戳相关推荐

  1. 用C语言将当前北京时间转换成UTC时间戳

    用C语言将当前北京时间转换成UTC时间戳 时间戳表示格式 UNIX时间戳 指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不 ...

  2. Linux指令日期转为字符串,linux时间转换函数【转】

    Linux下的时间函数 我们在编程中可能会经常用到时间,比如取得系统的时间(获取系统的年.月.日.时.分.秒,星期等),或者是隔一段时间去做某事,那么我们就用到一些时间函数. linux下存储时间常见 ...

  3. python时间戳转换成时间_Python时间,日期,时间戳之间转换,时间转换时间戳,Python时间戳转换时间,Python时间转换时间戳...

    #1.将字符串的时间转换为时间戳方法: a = "2013-10-10 23:40:00" #将其转换为时间数组 import time timeArray = time.strp ...

  4. 字符串和时间转换sql

    oracle: 当前时间:sysdate – dual (Oracle中的一张内部表,只有一行一列,一般用作特定查询) 时间转字符串: to_char(date,format) select to_c ...

  5. js获取当前时间戳;指定时间转换时间戳;时间戳转换时间

    1 JavaScript 获取当前时间戳: 方法一 var timestamp = Date.parse(new Date()); 结果:1557479983000 方法二 var timestamp ...

  6. vue-element表格Day.js时间转换时间戳

    这里写自定义目录标题 vue-element表格Day.js时间转换时间戳 具体内容 vue-element表格Day.js时间转换时间戳 记录一下修改时间的方式. 具体内容 用的vue-elemen ...

  7. java 时间转换字符串_java时间转换字符串万能操作工具类,让你轻松转换

    package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  8. 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)

    前端js处理特殊时间格式(2020-11-27T02:58:41.000000Z): //特殊格式时间转换(2020-11-27T02:58:41.000000Z)function timeChang ...

  9. python字符串格式时间转化为时间戳

    1.问题: 在服务请求记录时间时,往往是毫秒级的,在秒上计数会有小数点,例如 dt= '2020-09-09 15:03:56.742' time.strptime支持的几种数字类型如下: decim ...

最新文章

  1. 淘宝李晓拴:淘宝网PHP电子商务应用
  2. 广联达2018模板算量步骤_工程人必须掌握:这9份软件算量教程+24份算量计算表,无偿分享...
  3. 慧联A8最新检测使用教程V2.0.3
  4. mgr未同步 mysql_mysql8.0 搭建mgr踩坑记录
  5. (Kali)BackTrack-linux安全***测试系统盘
  6. 洛谷——P2656 采蘑菇
  7. opencv怎么2个摄像头_内脏脂肪过高怎么办?从2个方法入手,坚持3个月甩掉小肚腩...
  8. WIncc7.4入门
  9. 思维导图,UML在线画图工具
  10. 2021年软件设计师考试大纲
  11. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
  12. 微型计算机2019年年度盘点,「2019 IT产业市场回顾」性能堆砌、轴之战再起、多声道普及!2019年游戏外设市场年终盘点...
  13. 台式电脑 在哪找到计算机名,win7电脑的投屏功能在哪?教你找到!
  14. python类计算器开发_开发一个简单的python计算器
  15. Eolink 10月企业与产品动态速览
  16. vue:hadoop@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
  17. 初识React及React开发依赖介绍
  18. 在Kali中 利用工具Fluxion渗透wpa/wpa2加密WiFi 详细步骤(小白适用) 2020.1
  19. 董藩:房价还要跌的说法害人
  20. 数据结构趣味题-约瑟夫环

热门文章

  1. 怎么将照片转到Word文档?快来试一试这个方法
  2. 温馨的家庭与伟大的事业
  3. linux下ftp管控,proftpd使用
  4. 获取系统信息(oshi-core)
  5. 城市生命线安全风险综合监测预警解决方案
  6. 【区块链】激活数字资产的蓝海,布比区块链打造新一代价值流通网络,以让数字资产自由流动起来
  7. 测试爱情游戏软件,爱情测试模拟器手游
  8. 【日常Exception】第二十二回:构造函数异常Cannot construct instance of `xx.xxx` (no Creators, like default construct
  9. php array pluck,PHP 将回调函数作用到给定数组的单元上
  10. Hive 自定义函数