我将设置一个日期变量(Say '08 -JUN-2011'),我想根据该日期进行一些计算,即, 1.必须到达给定日期的第一天 2.给定日期月份的上一个日期 3.给定日期月份的最后一天。
我所知道的是使用当前系统日期和时间进行操作,但不知道如何使用用户定义的日期来实现。我需要使用Linux shell脚本来实现这一点。
任何帮助将不胜感激。
谢谢,
Karthik
答案 0 :(得分:10)
以下是使用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
答案 1 :(得分:3)
这将在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:)
答案 2 :(得分:3)
当您使用Linux时,您可以使用GNU日期实用程序。它几乎可以处理你想到的相对日期的任何描述。
以下是一些例子
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
快捷方式收集信息,这显示了所有基本选项(但有时很难解释。)
我希望这会有所帮助。
答案 3 :(得分:0)
$ date +%m/01/%Y
我来这里是为了寻找一种方法来获得当月的第一天。
答案 4 :(得分:0)
使用dateutils'dround工具:
当月:
$ dround today -1
2014-02-01
上个月
$ dround today -31
2014-01-31
本月最后一天:
$ dround today +31
2014-02-28
当然,您可以使用自定义日期而不是today
,其目的是向下舍入或向上舍入到所需的日期,例如: 2010-10-04给出的下一个第一个月:
$ dround 2010-10-04 +1d
2010-11-01