免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: RE_HASH

[日期时间] 上个月最后一个工作日 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-09 23:37 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-08-09 23:41 编辑

这样?
  1. perl -e 'BEGIN{@now=split(/-/,`date +%Y-%m-%d`)}{ while(++$n){$_=`date -d "-$n day" +%Y-%m-%d.%w`;if(/-(\d{2})[^.]+\K\.(\d)/ and $now[1]>$1 and $2 and $2<6){if(unshift(@a,$`)==5){$,="\n";print @a;last}}} }'
复制代码
2016-07-25
2016-07-26
2016-07-27
2016-07-28
2016-07-29

我就想知道 march gives 0226,but 0229 expected 翻译成中文 是个 啥意思啊???!!!

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-08-09 23:54 |显示全部楼层
回复 11# sunzhiguolu


    输入3月的日期,返回2月26。应该是2月29。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-09 23:59 |显示全部楼层
本帖最后由 sunzhiguolu 于 2016-08-09 23:59 编辑

没发现啥问题啊,
  1. perl -e 'BEGIN{@now=qw/2016 03 15/}{ while(++$n){$_=`date -d "-$n day" +%Y-%m-%d.%w`;if(/-(\d{2})[^.]+\K\.(\d)/ and $now[1]>$1 and $2 and $2<6){if(unshift(@a,$`)==5){$,="\n";print $a[-1];last}}} }'
复制代码
2016-02-29

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-08-10 00:07 |显示全部楼层
回复 13# sunzhiguolu


    这个对

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2016-08-10 00:11 |显示全部楼层
那个的确有问题, 是变成找 星期5 了. 改了下:
  1. perl -e 'BEGIN{@now=qw/2016 03 08/}{ while(++$n){$_=`date -d "-$n day" +%Y-%m-%d.%w`;if(/-(\d{2})[^.]+\K\.(\d)/ and $now[1]>$1 and $2 and $2<6){print $`;last}} }'
复制代码
2016-02-29

论坛徽章:
4
程序设计版块每日发帖之星
日期:2016-08-11 06:20:00数据库技术版块每日发帖之星
日期:2016-08-13 06:20:00程序设计版块每日发帖之星
日期:2016-08-14 06:20:00数据库技术版块每日发帖之星
日期:2016-08-14 06:20:00
发表于 2016-08-10 15:23 |显示全部楼层
  1. #!/bin/bash
  2. # filename: test.sh

  3. get_last_day()
  4. {
  5.         year=`expr substr $1 1 4`
  6.         cur_month=`expr substr $1 5 2`
  7.         month=`expr $cur_month - 1`
  8.         if [ $month = '01' ] || [ $month = '03' ] || [ $month = '05' ] || [ $month = '07' ] || [ $month = '08' ] || [ $month = '10' ] || [ $month = '12' ] ;then
  9.                 echo "上个月天数-->" 31
  10.         elif [ $month = '02' ] ; then
  11.                 if [ `expr $year % 400` = 0 ] ; then
  12.                         echo "上个月天数-->" 29
  13.                 elif [ `expr $year % 4` = 0 ] && [ `expr $year % 100` != 0 ] ; then
  14.                         echo "上个月天数-->" 29
  15.                 else
  16.                         echo "上个月天数-->" 28
  17.                 fi
  18.         else
  19.                 echo "上个月天数-->" 30
  20.         fi
  21. }
  22. get_last_day $1
复制代码
脚本输出:
root@localhost:~# ./test.sh 201608
上个月天数--> 30

求职 : 技术支持/维
论坛徽章:
0
发表于 2016-08-10 17:09 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
发表于 2016-08-10 20:39 |显示全部楼层
  1. #coding=utf8
  2. from datetime import timedelta, datetime
  3. from dateutil.relativedelta import relativedelta
  4. from dateutil.rrule import *

  5. text = raw_input('please input date(YYYY-MM-DD):')
  6. #text = '2016-08-03'
  7. w  = datetime.strptime(text, '%Y-%m-%d')
  8. first = datetime(day=1, month=w.month, year=w.year)
  9. prev_month_end = first - timedelta(days=1)

  10. print datetime.strftime(prev_month_end + relativedelta(weekday=FR(-1)), '%Y-%m-%d')
复制代码
亲测没bug~~

最好安装第三方包 python-dateutil~

参考链接在这里http://python3-cookbook.readthed ... st_friday_date.html

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2016-08-10 21:12 |显示全部楼层
不需要考虑法定假日吗?

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2016-08-10 23:19 |显示全部楼层
感谢各位帮忙。我的最后解决方案报告:

我用大神们给的code生成了一个20年的列表,每次用的时候,grep一下就好。
谢谢楼上的问题,我不需要考虑节假日,但应该也可以加到列表里。,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP