免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2422 | 回复: 6
打印 上一主题 下一主题

[C] 请教时间转换问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-02 11:50 |只看该作者 |倒序浏览
刚学C语言,想把一个时间"2014-06-01 12:00:00"转换为秒数. 这个时间我会在数据库取出来,如果转换秒数,,以下例子可以实现,但要把时间.分拆给数据结构中, 但如何分拆呢?大家能否指教一下!谢谢!

#include <stdio.h>
#include <time.h>

int main(){

//char *timep = "2014-06-01 12:00:00";

    time_t t;
    struct tm stm;

stm.tm_year = 2014;
stm.tm_mon = 06;
stm.tm_mday = 01;
stm.tm_hour = 12;
stm.tm_min = 00;
stm.tm_sec = 01;

stm.tm_year-=1900;

stm.tm_mon-=1;

t=mktime(&stm);

printf("%d\n",t);

return 0;

}


输出结果:1401595201

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
2 [报告]
发表于 2014-06-02 11:57 |只看该作者
用strptime函数

论坛徽章:
0
3 [报告]
发表于 2014-06-02 13:49 |只看该作者
#include <stdio.h>
#include <time.h>

int main(){

char *timep = "2014-06-01 12:00:00";
char fmt[] = "%Y-%m-%d %H:%M:%s";

    time_t t;
    struct tm stm;
/*
stm.tm_year = 2014;
stm.tm_mon = 06;
stm.tm_mday = 01;
stm.tm_hour = 12;
stm.tm_min = 00;
stm.tm_sec = 01;
*/
strptime(timep, fmt, stm);

stm.tm_year-=1900;

stm.tm_mon-=1;

t=mktime(&stm);

printf("%d\n",t);

return 0;

}

结果是:

Segmentation fault

看上去好像没有错的哦,,不知道,是那里出错了.

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
4 [报告]
发表于 2014-06-02 15:49 |只看该作者
数据库取出的时候直接转一下就好了,unix_timestamp即可。PS:数据库里面我在设计的时候一般时间字段直接存int类型的了

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
5 [报告]
发表于 2014-06-03 09:24 |只看该作者
topstar_allan 发表于 2014-06-02 13:49
#include
#include


strptime(timep, fmt, stm);

第三个参数要传指针。

论坛徽章:
0
6 [报告]
发表于 2014-06-04 14:42 |只看该作者
mktime转换后是个秒计数值

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
7 [报告]
发表于 2014-06-05 10:09 |只看该作者
回复 3# topstar_allan
除了前面提过的stm=>&stm外,%s应该改为%S,还有这个时间“2014-06-01 12:00:00”
调用strptime后的year,month不需要自己手动去-1900,-1,你可以打印结构体看一下,
对应的year已经是114,month是5,最后代码改成这样应该可以了。
  1. #include <stdio.h>
  2. #include <time.h>

  3. int main(){

  4. const char *timep = "2014-06-01 12:00:00";
  5. const char fmt[] = "%Y-%m-%d %H:%M:%S";

  6. time_t t;
  7. struct tm stm;
  8. /*
  9. stm.tm_year = 2014;
  10. stm.tm_mon = 06;
  11. stm.tm_mday = 01;
  12. stm.tm_hour = 12;
  13. stm.tm_min = 00;
  14. stm.tm_sec = 01;
  15. */
  16. strptime(timep, fmt, &stm);

  17. //stm.tm_year-=1900;

  18. //stm.tm_mon-=1;

  19. t=mktime(&stm);

  20. printf("%d\n",t);

  21. return 0;

  22. }

  23. gcc test.c -o t
  24. ./t
  25. 1401595200
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP