免费注册 查看新帖 |

Chinaunix

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

[日期时间] 根据年周,返回周一的具体日期(注:系统返回2012-1-1为52周) [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-16 15:29 |只看该作者 |倒序浏览
本帖最后由 plumdavid 于 2013-08-16 18:03 编辑

根据年周数,如2013年32周,返回此周的周一日期.
注:周以星期一为第一天.

谢谢各位回复,大家多数的算法都是错误的。

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
2 [报告]
发表于 2013-08-16 16:00 |只看该作者
  1. awk -vl=32 'BEGIN{t1=mktime("2013 01 01 00 00 00")+(l*7*24*3600);t2=(strftime("%u",tstamp)-1)*3600;print strftime("%Y%m%d",t1-t2)}'
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
3 [报告]
发表于 2013-08-16 16:05 |只看该作者
回复 2# 代号:军刀


    谢谢.
    刚研究了一下shell年周数,系统设定的有点复杂,比如:2012年1月1日,年周数是2011年52周.
    这个问题我还得再研究下.

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
4 [报告]
发表于 2013-08-16 16:06 |只看该作者
  1. [nms@localhost week]$ date -d '2012-01-01 00:00:01' '+%V'
  2. 52
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2013-08-16 16:16 |只看该作者
回复 4# plumdavid

maybe you want to know there are many spec to define week date different

http://en.wikipedia.org/wiki/ISO_week_date
The ISO week date system is a leap week calendar system that is part of the ISO 8601 date and time standard. The system is used (mainly) in government and business for fiscal years, as well as in timekeeping.
...

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-15 06:20:01
6 [报告]
发表于 2013-08-16 16:27 |只看该作者
jason680 发表于 2013-08-16 16:16
回复 4# plumdavid

maybe you want to know there are many spec to define week date different


多谢。

论坛徽章:
1
天蝎座
日期:2013-08-22 15:14:44
7 [报告]
发表于 2013-08-16 16:32 |只看该作者
wk=32;date -d "20121231 $wk week" +%Y-%m-%d

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2013-08-16 16:32 |只看该作者
回复 1# plumdavid
  1. #!/bin/bash
  2. Y=$1
  3. W=$2
  4. D=$[`date -d "${Y}0101" +%u`-1]
  5. d=$[(W-1)*7-D]

  6. date -d "${Y}0101 +${d} days" "+%G-%m-%d 第%V周 星期%u"
复制代码
  1. [root@ awktest]# cat a.sh
  2. #!/bin/bash
  3. Y=$1
  4. W=$2
  5. D=$[`date -d "${Y}0101" +%u`-1]
  6. d=$[(W-1)*7-D]

  7. date -d "${Y}0101 +${d} days" "+%G-%m-%d 第%V周 星期%u"
  8. [root@ awktest]# ./a.sh 2013 32
  9. 2013-08-05 第32周 星期1
  10. [root@ awktest]# ./a.sh 2013 34
  11. 2013-08-19 第34周 星期1
  12. [root@ awktest]# ./a.sh 2013 3
  13. 2013-01-14 第03周 星期1
  14. [root@ awktest]# ./a.sh 2013 25
  15. 2013-06-17 第25周 星期1
  16. [root@ awktest]#
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2013-08-16 16:35 |只看该作者
回复 6# plumdavid

which one do you like (%V,%U,%W) ...

# man date | grep '%[UVW]'
       %g     the 2-digit year corresponding to the %V week number
       %G     the 4-digit year corresponding to the %V week number
       %U     week number of year with Sunday as first day of week (00..53)
       %V     week number of year with Monday as first day of week (01..53)
       %W     week number of year with Monday as first day of week (00..53)

# seq 1 10 | xargs -i date -d "2012-1-{} 0:0:1" +"%V,%U,%W,%w"
52,01,00,0
01,01,01,1
01,01,01,2
01,01,01,3
01,01,01,4
01,01,01,5
01,01,01,6
01,02,01,0
02,02,02,1
02,02,02,2

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
10 [报告]
发表于 2013-08-16 17:02 |只看该作者
  1. #!/bin/bash
  2. YEAR=2013
  3. WEEK=32
  4. DAY=$(echo $((WEEK*7-1)))
  5. DATE=($(date -d "${YEAR}0101 +$DAY day" '+%Y %m %d'))

  6. cal -m ${DATE[1]} ${DATE[0]}|awk -v year=${DATE[0]} -v month=${DATE[1]} -v day=${DATE[2]} '$0~day{print year,month,$1}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP