我将设置一个日期变量(Say '08 -JUN-2011'),并且我想根据该日期进行一些计算,即
1.必须获得给定的第一天一天的月份。
2.给定日期的月份的前一日期。
3.给定日期的最后一天。Linux脚本 - 日期操作
我所知道的只是使用当前系统日期和时间进行操作,但不知道如何使用用户定义的日期来实现。我需要使用Linux shell脚本来实现这一点。
任何帮助将不胜感激。
感谢,
KARTHIK
我将设置一个日期变量(Say '08 -JUN-2011'),并且我想根据该日期进行一些计算,即
1.必须获得给定的第一天一天的月份。
2.给定日期的月份的前一日期。
3.给定日期的最后一天。Linux脚本 - 日期操作
我所知道的只是使用当前系统日期和时间进行操作,但不知道如何使用用户定义的日期来实现。我需要使用Linux shell脚本来实现这一点。
任何帮助将不胜感激。
感谢,
KARTHIK
下面介绍如何使用GNU日期进行操作:
#!/bin/sh
USER_DATE=JUN-08-2011
# first day of the month
FIRST_DAY_OF_MONTH=$(date -d "$USER_DATE" +%b-01-%Y)
PREVIOUS_DAY=$(date -d "$USER_DATE -1 days" +%b-%d-%Y)
# last day of the month
FIRST_DAY_NEXT_MONTH=$(date -d "$USER_DATE +1 month" +%b-01-%Y)
LAST_DAY_OF_MONTH=$(date -d "$FIRST_DAY_NEXT_MONTH -1 day" +%b-%d-%Y)
echo "User date: $USER_DATE"
echo "1. First day of the month: $FIRST_DAY_OF_MONTH"
echo "2. Previous day: $PREVIOUS_DAY"
echo "3. Last day of the month: $LAST_DAY_OF_MONTH"
输出是:
User date: JUN-08-2011
1. First day of the month: Jun-01-2011
2. Previous day: Jun-07-2011
3. Last day of the month: Jun-30-2011
哦,非常感谢,这真的很有用。每个人的回答都很好,Gregg的回答对我来说最适合。谢谢! – Karthik 2011-06-11 12:35:43
这将在shell脚本将被进行卷积。你最好在perl中使用Date :: Manip,或者在另一个全功能语言中使用类似的东西。但是,我可以想出一些使用date命令执行此操作的方法。首先,你可以使用一个--date参数设定日期的起点,就像这样:
$ date --date='08-JUN-2011' Wed Jun 8 00:00:00 EDT 2011
你可以得到一个日期是这样的:
$ date --date='08-JUN-2011 -1 days' Tue Jun 7 00:00:00 EDT 2011
最后一天这个月,我只会从31号回到日期不会失败。你可以检查$?对于
$ date --date='31-JUN-2011';echo $? date: invalid date `31-JUN-2011' 1 $ date --date='30-JUN-2011';echo $? Thu Jun 30 00:00:00 EDT 2011 0
对于本月的第一天......这通常是01 :)
当你使用Linux,那么hhopefully你有GNU date命令可用。它几乎可以处理任何你想到的相对日期的描述。
下面是一些例子
date --date="last month" +%Y-%m-%d
date --date="yesterday" +%Y-%m-%d
date --date="last month" +%b
x=$(date --date "10 days ago" +%Y/%m/%d)
要了解更多有关它看GNU Date examples
一旦你使用它的一些,你可以通过快捷的信息与date --help
收集,显示所有的基本选项(但有时很难解释。)
我希望这有助于。
感谢您的参考链接和支持! – Karthik 2011-06-11 12:36:57
$ date +%m/01/%Y
我来到这里寻找一种方式来获得当前的第一天月。
使用dateutils' dround工具:
本月:
$ dround today -1
2014-02-01
上月
$ dround today -31
2014-01-31
末当月的一天:
$ dround today +31
2014-02-28
凑rse可以使用自定义日期而不是today
,这个想法是向下舍入或达到期望的当月日期,例如,下一个给出的月份2010-10-04:
$ dround 2010-10-04 +1d
2010-11-01
对于#1,你的意思是星期几(即星期一至星期五?),它将始终为'01' dayNum,对吧? ;-) 祝你好运。 – shellter 2011-06-10 15:26:52