Chinaunix

标题: 各位有好的日期加减函数吗.. [打印本页]

作者: pandaiam    时间: 2013-01-17 11:25
标题: 各位有好的日期加减函数吗..
比如这种
  1. int modidate(char *pdate, int off);
复制代码
目前假设输入就是这种 "20130117", 8位有效数字的字符串, off可大可小,可正可负..
直接把加减后的日期写回到pdate.

THX
作者: pandaiam    时间: 2013-01-17 11:29
off是'天'单位的..
作者: hellioncu    时间: 2013-01-17 11:33
转换成time再计算,再转成字符串
作者: linux_c_py_php    时间: 2013-01-17 11:59
       #include <time.h>

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

       #define _XOPEN_SOURCE       /* See feature_test_macros(7) */
       #include <time.h>

       char *strptime(const char *s, const char *format, struct tm *tm);

       time_t mktime(struct tm *tm);


作者: pandaiam    时间: 2013-01-17 12:06
hellioncu 发表于 2013-01-17 11:33
转换成time再计算,再转成字符串


大致是这个意思吧.
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>


  5. #define DAYSEC 3600*24

  6. int main(int argc, char*argv[])
  7. {
  8.         int off;
  9.         char * stime;
  10.        
  11.         time_t now_time;
  12.         time_t new_time;
  13.        
  14.         struct tm *pansctime;
  15.        
  16.         off = atoi(argv[1]);
  17.         printf("%d\n", off);
  18.        
  19.         now_time=time(NULL);
  20.         new_time=now_time+ off*DAYSEC;
  21.         pansctime = localtime(&new_time);
  22.        
  23.         stime = asctime(pansctime);
  24.        
  25.         printf("%s\n", stime);
  26.         return 0;
  27. }
复制代码

作者: yulihua49    时间: 2013-01-17 12:51
本帖最后由 yulihua49 于 2013-01-17 12:55 编辑
pandaiam 发表于 2013-01-17 11:29
off是'天'单位的..

我们使用准儒略历系统,就是一某日为时间原点,距离该点的天数(或分钟数,秒数,微妙数)
所有日期直接加减乘除即可,配上字符串与准儒略历转换函数就可以了。

日期转准儒略历, 计算 , 转回来。
很多数据库的API里有这类转换函数,如ORACLE,SYBASE什么的。

mktime也行,就是时间有点短。
作者: giantchen    时间: 2013-01-18 01:19
回复 1# pandaiam


    用 muduo 的 Date class,内部是 Julian Day Number 算法。
作者: Ager    时间: 2013-01-18 05:51
yulihua49 发表于 2013-01-17 12:51
我们使用准儒略历系统,就是一某日为时间原点,距离该点的天数(或分钟数,秒数,微妙数)
所有日期直接加减乘除即可,配上字符串与准儒略历转换函数就可以了。


顶一下 {:3_193:}

不过,准确地说,不是儒略历,是格里高利历。

呵呵:)


作者: Sevk    时间: 2013-01-18 08:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: windoze    时间: 2013-01-18 12:43
对于最近几百年这样做是可以的,但是要注意,年月日是“历法单位”,不是“时间单位”,历法是人根据天文观测制定的,并不断修正,而“修正”这件事是没有规律的。

比如在欧洲大陆,1582年10月5日至10月14日,这10天就是不存在的,调整后的历法就是格里高利历;但是在英国,这个调整一直拖到了一百多年后,直到1752年,这一年的9月3日至13日这11天是不存在的;而在此期间的一百多年里两地的日期一直不相同。
作者: yulihua49    时间: 2013-01-21 21:37
Ager 发表于 2013-01-18 05:51
顶一下  

不过,准确地说,不是儒略历,是格里高利历。

Julian Day ,译作儒略历,你,还有上帖,说的对。我只用了一个简洁的名词。
作者: pandaiam    时间: 2013-01-22 09:12
已经使用转time后加减秒来计算了..
只不过感觉这样确实有点短,但目前来说够了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2