【问题标题】:Linux Script- Date ManipulationsLinux 脚本 - 日期操作
【发布时间】:2014-02-05 15:04:55
【问题描述】:

我将设置一个日期变量(例如“08-JUN-2011”),我想根据该日期进行一些计算,即,
1. 必须得到给定日期当月的第一天。
2. 给定日期月份的上一个日期。
3. 给定日期月份的最后一天。

我只知道使用当前系统日期和时间进行操作,但不知道如何使用用户定义的日期来实现。我需要使用 Linux shell 脚本来实现。

我们将不胜感激。

谢谢,
卡提克

【问题讨论】:

  • 对于#1,您的意思是星期几(即周一至周五?),dayNum 始终是“01”,对吧? ;-) 祝你好运。

标签: linux shell scripting


【解决方案1】:

以下是使用 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 的回答真的最适合我。谢谢!
【解决方案2】:

这将在 shell 脚本中复杂化。你最好在 perl 中使用 Date::Manip,或者在另一种功能齐全的语言中使用类似的东西。但是,我可以想出一些方法来使用 date 命令来做到这一点。首先,您可以使用 --date 参数设置日期的起点,如下所示:

$ 日期 --date='08-JUN-2011' 2011 年 6 月 8 日星期三 00:00:00 EDT

您可以像这样获取上一个日期:

$ date --date='08-JUN-2011 -1 天' 2011 年 6 月 7 日星期二 00:00:00 EDT

对于本月的最后一天,我会从 31 点往回走,直到日期不会失败。你可以检查$?为此

$ 日期 --date='31-JUN-2011';echo $? 日期:无效日期“2011 年 6 月 31 日” 1 $ 日期 --date='30-JUN-2011';echo $? 2011 年 6 月 30 日星期四 00:00:00 EDT 0

每月的第一天...通常是 01 :)

【讨论】:

    【解决方案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来快捷地收集你的信息,它显示了所有的基本选项(但有时很难解释。)

    我希望这会有所帮助。

    【讨论】:

    • 感谢参考链接和支持!
    【解决方案4】:
    $ date +%m/01/%Y
    

    我来这里是为了想办法得到当月的第一天。

    【讨论】:

      【解决方案5】:

      使用 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
      

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 2012-02-22
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多