Chinaunix首页 | 论坛 | 博客
  • 博客访问: 430062
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: C/C++

2013-08-02 21:38:10

今天在编程中遇到一件很囧的事情,领导说我太年轻,呵呵,估计自己确实是经验不足,以后要认真总结,虚心学习。
其实这个问题很简单,就是获取本地时间,然后将整型时间变量转换为字符串型,但就这个问题就搞了我一个多小时,郁闷的是最后证明自己写的代码还不好用,而这个问题只要一个命令即可搞定,哎!不说了,在此贴出来,以此为鉴。

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<math.h>
  4. typedef struct _tag_stm{
  5.     char syear[5] ;
  6.     char smon[5] ;
  7.     char sday[5] ;
  8.     char shour[5] ;
  9.     char smin[5] ;
  10.     char ssec[5] ;
  11. }stm_t;

  12. int Get_Tm_Str(struct tm *tm, stm_t *tm_str)
  13. {
  14.     int i = 0 ,j = 0;
  15.     (tm->tm_year) += 2000 ;
  16.     

  17.     for(i = 0; i < 5; i++)
  18.     {
  19.         if((tm->tm_year / 10) > 0)
  20.         {
  21.             tm_str->syear[i] = tm->tm_year / (10000/(pow(10,i+1))) + '0';
  22.             tm->tm_year %= 10000/(pow(10,i+1));
  23.         }
  24.         else if(((tm->tm_year / 10) == 0) && tm->tm_year > 0){
  25.             tm_str->syear[i] = tm->tm_year + '0';
  26.             tm_str->syear[i + 1] = '\0';
  27.             tm->tm_year = 0;
  28.         }
  29.         if((tm->tm_mon / 10) > 0)
  30.         {
  31.             tm_str->smon[i] = tm->tm_mon / (100/(pow(10,i+1))) + '0';
  32.             tm->tm_mon %= 100/(pow(10,i+1));
  33.         }
  34.         else if(((tm->tm_mon / 10) == 0) && tm->tm_mon > 0){
  35.             tm_str->smon[i] = tm->tm_mon + '0';
  36.             tm_str->smon[i + 1] = '\0';
  37.             tm->tm_mon = 0;
  38.         }
  39.         if((tm->tm_mday / 10) > 0)
  40.         {
  41.             tm_str->sday[i] = tm->tm_mday / (100/(pow(10,i+1))) + '0';
  42.             tm->tm_mday %= 100/(pow(10,i+1));
  43.         }
  44.         else if(((tm->tm_mday / 10) == 0) && tm->tm_mday > 0){
  45.             tm_str->sday[i] = tm->tm_mday + '0';
  46.             tm_str->sday[i + 1] = '\0';
  47.             tm->tm_mday = 0;
  48.         }
  49.     }
  50.     return 0;
  51. }
  52. int main(void)
  53. {
  54.     stm_t tm_str;
  55.     struct tm *tm;
  56.     time_t now;
  57.     now = time(NULL);
  58.     tm = localtime(&now);

  59.     Get_Tm_Str(tm, &tm_str);
  60.     //
  61.     printf("the tm_str->s_year %s",tm_str.syear);
  62.     printf("the tm_str->s_mon %s",tm_str.smon);
  63.     printf("the tm_str->s_day %s",tm_str.sday);

  64.     while(1);
  65. }
而事实证明:linux下虽然没有itoa函数,但是可以使用sprintf函数代替,只怪自己孤陋寡闻,竟然没想到sprintf函数,其实这个函数经常使用的,但就其具体作用不是很清楚,导致了遇到问题时想不到该函数,以后要以此为鉴啊!

点击(此处)折叠或打开

  1. typedef struct _tag_stm{
  2.     char syear[5] ;
  3.     char smon[3] ;
  4.     char sday[3] ;
  5.     char shour[3] ;
  6.     char smin[3] ;
  7.     char ssec[3] ;
  8. }stm_t;

  9. int Get_Tm_Str(struct tm *tm, stm_t *tm_str)
  10. {
  11.     tm->tm_year += 1900;
  12.     do{
  13.         sprintf(tm_str->syear, "%4d", tm->tm_year);
  14.         sprintf(tm_str->smon, "%2d", tm->tm_mon);
  15.         sprintf(tm_str->sday, "%2d", tm->tm_mday);
  16.         sprintf(tm_str->shour, "%2d", tm->tm_hour);
  17.         sprintf(tm_str->smin, "%2d", tm->tm_min);
  18.         sprintf(tm_str->ssec, "%2d", tm->tm_sec);
  19.         }while(0);
  20.     return 0;


  21. }
这样就搞定,不过需要注意sprintf中的%后的数值,应该比时间数组大小小1,用于sprintf自动填充'\0'.





阅读(1067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~