shell命令格式严格,不像python那样命令行中可以添加空格。如等号两边无空格。有多余空格错误,日期date命令就是最明显的例子。

命令格式:

date [-u] [-d datestr] [-s datestr] [--utc] [--universal][--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT][MMDDhhmm[[CC]YY][.ss]]

如:

date +%Y%m%d             :以yyyymmdd格式输出(20111118)

date --date="1 day ago" +%Y%m%d :一天前的日期

date -d "-2 day 20111111" +%Y%m%d

"

for i in `seq 0 6`     :循环看 参数顺序无关,命令都一样

do

    date -d "$day +$i day" +%Y%m%d   :正数可以省略符号

    date +%Y%m%d -d "$day +$i day"

date +%Y%m%d -d "$i day $day "

date +%Y%m%d -d "+$i day $day "

    date +%Y%m%d -d $day

done

格式注意

1,date后面每个空格之间都是一个独立的参数,分别看做整体,用双引号格式能看的更为清楚,如date "+%Y%m%d %H:%M:%S" -d "+1 hour"

i.             -d“-2 day20111111”指定输出内容

ii.             “+%Y%m%d”是一个整体,控制输出格式,+后面无空格

2,参数顺序无关,如

date -d "-2 day 20111111" +%Y%m%d

date +%Y%m%d -d "-2 day 20111111"

date +%Y%m%d -d "20111111 -2 day"

都一样。

3,独立参数有无双引号都行,

date -d 2014-02-13 +%s和date -d"2014-02-13" "+%s"是一样的,还有date -d'2014-02-13' +%s

时间字符串的转化:

用date 的输出格式控制实现,但“月日年”和“时分秒”必须分开处理,否则会无法识别。such as

2013-10-30 20:12:59 或者 20131030 20:12:59

注意:

1,二者用空格分割;

2,年月日作为整体,格式十分灵活,可以随意写。但时分秒必须用冒号”:”分开,否则无法识别。

1 date字符串与时间戳格式互转:

A)字符串转时间指定格式:

计算2011111前两天

date -d "-2 day 20111111" +%Y%m%d   (输出为 20111109)

或者date --date="20130913"+%Y%m%d

B)字符串转换为时间戳:

date -d "2010-10-18 00:00:00" +%s    (输出  1287331200)

-d参数指定字符串,+%s表示输出时间戳。

C)时间戳转换为字符串:

date -d '1970-01-01 UTC 1287331200 seconds' +"%Y-%m-%d %T"(输出2010-10-18 00:00:00)

或者直接用@符号

date -d @1287331200 "+%Y-%m-%d

D)时间戳的日期计算:

seconds=`date -d "2010-10-18 00:00:00" +%s`     #得到时间戳

seconds_new=`expr $seconds + 86400`          #加上一天的秒数86400

date_new=`date -d @$seconds_new "+%Y-%m-%d"`   #获得指定日前加上一天的日前

2 分钟计算的两种方法:

1)date时间计算,输出用格式控制符:

date "+%Y-%m-%d %H:%M:%S" -d "-15 minute$yearof-$monthof-$dayof 20:12:59"

例子:

yearof="2013"

monthof="10"

dayof="30"

nowth=1

echo $nowth

echo $dayof

date "+%G-%m-%d %H:%M:%S" -d "2013-10-3020:12:59"

date "+%Y%m%d%H%M%S" -d "2013-10-30 20:12:59"

mytime=`date "+%Y-%m-%d %H:%M:%S" -d"$yearof-$monthof-$dayof 20:12:59"`

echo "$mytime is"

mytime=`date "+%Y-%m-%d %H:%M:%S" -d "-15 minute$yearof-$monthof-$dayof 20:12:59"`

echo "$mytime now is"

nowtime=`date "+%Y%m%d%H%M%S" -d"$yearof-$monthof-$dayof 20:12:59"`

#time must be with :, if no, wrong

echo "$nowtime is"

nowtime=`date "+%Y%m%d%H%M%S" -d "-15 minute${yearof}${monthof}${dayof} 20:12:59"`

echo "$nowtime now is"

2)转为时间戳计算:

#date "+%Y-%m-%d %H:%M:%S" -d "20131030203859"

#date -d "$yearof-$monthof-$dayof 14:32:12" +%s

#date -d "$yearof-$monthof-$dayof 14:32:12" +%s

3 屏蔽字符串,如分和秒归0:

true_time="2013-09-15 15:36:11"

start_time=`date "+%Y%m%d%H0000" -d"$true_time"`

echo $start_time

##mytime=`date -d "$start_time" "+%s"`#invalid

test_time=`date "+%Y-%m-%d %H:00:00" -d"$true_time"`

echo $test_time

#转时间戳

start_time=`date -d "$test_time" "+%s"`

echo $start_time

4 按日期循环执行的shell:

oneday="20141103"

dbname="wizad"

set -x

for i in `seq 0 60`

do

onedayid=$(date -d"${oneday} +$i day" +%Y-%m-%d)

hive -e "use${dbname};

alter tablewizad_mdm_cleaned_hdfs add partition (day='${onedayid}',adn='3') location'/user/wizad/data/wizad/raw/${onedayid}/3_1/';

alter tablewizad_mdm_cleaned_hdfs add partition (day='${onedayid}',adn='5') location'/user/wizad/data/wizad/raw/${onedayid}/5_1/';

"

done

5 一些date常用案例:

1,将增加时间变成秒

time2=$((1*60*60+20*60))

echo$time2

4800

2,两个时间相加,计算出结果时间

time1=$(date +%s -d '1990-01-01 01:01:01')

time1=$(($time1+$time2))

time1=$(date +%Y-%m-%d\ %H:%M:%S -d"1970-01-01 UTC $time1 seconds");

echo $time1

1990-01-01 02:21:01

3,时间差计算方法

如:2010-01-01 与 2009-01-01 11:11:11 时间差

原理:同样转成时间戳,然后计算天,时,分,秒

time1=$(($(date +%s -d '2010-01-01') -$(date +%s -d '2009-01-01 11:11:11')));

echo time1

将time1 / 60 秒,就变成分了。

4,小时的计算:

date#当前时间

current_time=`date "+%Y-%m-%d%H:00:00" -d "-1 hour"` #取一小时前的时间,分秒清零

echo $current_time

start_time=`date -d"$current_time" "+%s"`#转化为时间戳

echo $start_time

end_time=`date "+%Y%m%d %H:%M:%S"-d "+1 hour ${current_time}"`#

echo $end_time

my_time=`date "+%Y-%m-%d%H:00:00"`

echo $my_time

上面两个都是取当前时间的分秒清零。

t_time=`date -d "$my_time""+%s"`

echo $t_time

t2_time=$((start_time+3600))  #注意,转化为时间戳后可以直接计算,用shell的简便计算符$((表达式)),直接求出一小时后的时间(时间戳格式)

echo $t2_time

shell的date命令:使用方法,以及小时、分钟的计算的更多相关文章

  1. javascript 的Date 格式化, 模仿shell中date命令的格式

    原文:javascript 的Date 格式化, 模仿shell中date命令的格式 shell 中显示当前的日期 [root@localhost]$ date '+%Y-%m-%d %H:%M:%S ...

  2. 在shell下执行命令的方法

    在shell下执行命令的方法 1. #!/bin/sh 语法:在shell.sh的开头写入 #!/bin/sh 一般的shell脚本就是这种用法.这种方法调用脚本开头的shell执行命令,子shell ...

  3. Linux date命令使用方法

    date命令用来显示或设定以及计算系统的日期和时间.本文主要描述date命令的基本语法和工作中常用的使用方法. date命令语法 用法:date [OPTION]... [+FORMAT] 常用参数: ...

  4. (转载)shell中用date命令获取昨天、明天或者多天前的日期

    (转载)http://blog.sina.com.cn/s/blog_3e4774e30100p0yv.html 使用date命令获取日期很方便,最近需要获取当前日期的下一天日期在linux应该如何获 ...

  5. hbase基本概念和hbase shell经常使用命令使用方法

    HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实现,它利用H ...

  6. shell中date命令对month进行加减操作的bug

    shell脚本中如何取上个月的月份呢?很容易能想到下面的命令: date +%Y%m -d '-1 month' 或者 date +%Y%m -d 'last month'   在大部分情况下这个命令 ...

  7. shell的date日期循环方法:日期格式转时间戳计算,再将时间戳转回日期格式

    1,日期对象转时间戳current_day 2,计算增量的时间戳,即循环每步的增量one_day 3,循环体计算,日期变量加增量后重新赋值自己 4,时间戳转回日期格式后输出 current_day=2 ...

  8. date命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/qmfsun/p/4598650.html date "+今天是%Y-%d-%m,现在是%H:%M:%S&qu ...

  9. date命令使用总结【转载】

    本文转载自:http://blog.sina.com.cn/s/blog_674b5aae0100o0w9.html 由于跨年.跨月.闰平年等特殊性,在日常编程过程中对日期的处理总是异常麻烦.目前,各 ...

随机推荐

  1. IDEA中Git的使用

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三:小 ...

  2. LOG4J日志级别详解

    日志记录器(Logger)是日志处理的核心组件. org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 ...

  3. MySQL命令行SQL脚本的导入导出小结(数据库的备份与还原)

    1.设置环境变量 要想在命令行下各处都能执行mysql命令,必须在系统变量Path中添加mysql的命令所在的目录.例如我安装的是集成PHP环境的mysql,在D盘xampps下,则我需要将" ...

  4. LAB颜色空间各通道的取值范围

    简介 LAB颜色空间在计算机视觉中经常被使用,知道L,A,B三个通道的取值范围有一定的意义. OpenCV获取LAB取值范围 下面是一段实验代码,用于获取LAB的取值范围. 基本思路是,排列组合所有R ...

  5. 如何将一个二进制的xxx.bin文件轻松转为C语言数组

    今天在写一个SPI-flash读写程序,目的是要将一个二进制文件写到SPI_FLASH中,最后通过开机读取,实际上这个.bin文件就是uboot和second-boot的结合体.通过SD卡写到SPI- ...

  6. 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

    输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. #define N 15 void findS ...

  7. apply函数用法

    procedure:  (apply proc arg1 ... args)  Proc must be a procedure and args must be a list. Calls proc ...

  8. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

  9. actionbar完全解析(一)

    Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作.界面导航等功能.使用ActionBar的好处是, ...

  10. Erlang简单并行服务器

    Erlang简单并行服务器(金庆的专栏)Erlang并行服务器为每个Tcp连接创建对应的连接进程,处理客户端数据.参考 Erlang程序设计(第2版)17.1.3 顺序和并行服务器并行服务器的诀窍是: ...