免费注册 查看新帖 |

Chinaunix

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

[函数] 求一个时间个是转换函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-09 15:05 |只看该作者 |倒序浏览
把time(0)返回的秒数,转化为年月日时分秒这样的

不过,希望有点优化,就是,如果时间是今天,就不用年月日,而是用“今天”来代替
如果年月日时昨天,则用“昨天”代替,
同样的,前天也要。

不知道哪位大侠是否已经实现过,可否共享下啊

谷歌百度了很久没找到

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2013-07-09 16:17 |只看该作者
time(0)肯定是今天

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
3 [报告]
发表于 2013-07-10 16:07 |只看该作者
本帖最后由 yulihua49 于 2013-07-10 16:29 编辑
aychxm 发表于 2013-07-09 15:05
把time(0)返回的秒数,转化为年月日时分秒这样的

不过,希望有点优化,就是,如果时间是今天,就不用年月 ...

正好我做了这个。


-bash-3.00$ cvtdate .
2013.07.10
-bash-3.00$ cvtdate -1
2013.07.09
-bash-3.00$ cvtdate +1
2013.07.11
-bash-3.00$ cvtdate 2.31
2013.02.28
-bash-3.00$ cvtdate -1.2.31
2012.02.29
-bash-3.00$ cvtdate -1.31
2013.06.30
-bash-3.00$ cvtdate +100
2013.10.18

在shell中使用:
if [ $# = 0 ]
then
        DAY=`cvtdate -1`
else
        DAY=`cvtdate $1`
fi
export NLS_DATE_FORMAT="YYYYMMDDHH24:MI:SS"
./unldcsv -f ./ld.ini -W"where cms_settlement_date=to_date('$DAY','YYYY.MM.DD')" CUT_PI_EXIt >exit.txt


shell:

DELDAY=`cvtdate -60`
cms_prod <<!
-- 删除历史记录
delete from recover_count_entry where txn_date<to_date('$DELDAY','YYYY.MM.DD');



/************************************************************************/
/*function:cvtdate 相对日期转换函数,返回准儒略历数(以天为单位)          */
/*description:                                                          */
/*基本形式:str(YYYY.MM.DD), refday:参考日期                             */
/*如果哪一段缺省,以参考日期的相应数字代替                               */
/*DD = 31,将被参考日期月底日取代                                        */
/*哪一段以+ -开头,相对参考日期的相应数字运算                           */
/*例:                                                                  */
/*  .代表当日,..代表本月当日。                                         */
/*  +1代表明天,-1代表昨天, .31或31或.L代表本月月底。                   */
/*  .-1.或-1. 代表上月同日,-1.31代表上月月底。                         */
/*  -1.1.1代表去年1月1日。 -1..代表去年本月当日。-1.2.31代表去年2月底   */
/*  2009.1.1代表2009年1月1日。.1.1或1.1代表今年1月1日。.1或1代表本月1日 */
/************************************************************************/
INT4    cvtdate(char *str,INT4 refday);

论坛徽章:
0
4 [报告]
发表于 2013-07-10 22:54 |只看该作者
还真不是我要的,其实这种需求类似一些论坛里回复时间显示

比如今天是7月10日,有个回帖是7月9日,那么显示的回帖时间是“昨天”这两个字,而不是7-9
而如果时间比较早了,如6月5日,那么就显示6-5

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2013-07-11 12:45 |只看该作者
这还不简单啊, 转成struct tm看一下其他字段都相同, mday是否-1就是了.

论坛徽章:
0
6 [报告]
发表于 2013-07-11 13:20 |只看该作者
自己写个  不复杂

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
7 [报告]
发表于 2013-07-13 00:38 |只看该作者
  1. #include <stdio.h>
  2. #include <time.h>

  3. int main()
  4. {
  5.     time_t t;
  6.     // get time in seconds
  7.     time(&t);
  8.     // format time
  9.     printf("%s", ctime(&t));
  10.     // covert time
  11.     struct tm *tm;
  12.     tm = localtime(&t);
  13.     // print date
  14.     printf("%d-%02d-%02d %02d:%02d:%02d\n",
  15.             tm->tm_year+1900, // year since 1900
  16.             tm->tm_mon+1, // month 0-11
  17.             tm->tm_mday, // day 1-31
  18.             tm->tm_hour, // hour 0-23
  19.             tm->tm_min, // minute 0-59
  20.             tm->tm_sec); // seconds 0-59

  21.     return 0;
  22. }
复制代码
不管昨天还是前天 都是相对于今天来命名的, 所以只要得到今天的时间值, 其他的任何时间都可以随便命名.
你可以把 比今天的 tm_mday 小1 的日期 叫做 “今天他爹”, 把 比 tm_day 大1 的日期叫做 “今天他儿”

论坛中的回复日期 肯定是用数据库保存起来的, 在显示之前 把该值取出来 和当前时间值 对比 就可以显示 其“名字” 了

论坛徽章:
0
8 [报告]
发表于 2013-07-13 09:05 |只看该作者
我知道原理,如果有人做过类似的,能否贡献下呗。或者用过类似c++的,告诉下地址,我去下载

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2013-07-13 11:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2013-07-16 00:05 |只看该作者
路过,学习了struct tm
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP