dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:2849回复:2

date命令

楼主#
更多 发布于:2013-06-02 13:22
date命令

date 用途说明

date命令可以用来显示和修改系统日期时间

需求
按照 squid access.log 日志的时间格式,使用date命令输出当前时间

squid 时间格式
tail /usr/local/squid/var/logs/access.log
123.121.136.13 - - [01/Jun/2013:11:38:44 +0800] xxxx TCP_MEM_HIT:NONE

date 输出
date +'%d/%b/%Y:%H'
01/Jun/2013:11


常用参数
格式:date
显示当前日期时间。
格式:date mmddHHMM           # 简而言之,就是“月日时分”
格式:date mmddHHMMYYYY
格式:date mmddHHMM.SS
格式:date mmddHHMMYYYY.SS

设置当前日期时间只有root用户才能执行,执行完之后还要执行 clock -w 来同步到硬件时钟。
mm为月份,dd为日期,HH为小时数,MM为分钟数,YYYY为年份,SS为秒数。

格式:date +FORMAT
根据指定格式显示当前时间。比如 date +%Y-%m-%d 就是以 YYYY-mm-dd 的形式显示当前日期,其中YYYY是年份,mm为月份,dd为日期。
 
常用FORMAT
%Y  YYYY格式的年份(Year)
%m  mm格式的月份(),01-12
%d   dd格式的日期(day of month),01-31
%H   HH格式的小时数(),00-23
%M  MM格式的分钟数(),00-59
%S   SS格式的秒数(),00-59
%F   YYYY-mm-dd格式的完整日期(Full date),同%Y-%m-%d
%T   HH-MM-SS格式的时间(Time),同%H:%M:%S
%s   自1970年以来的秒数。C函数time(&t) 或者Java中 System.currentTimeMillis()/1000, new Date().getTime()/1000
%w   星期几,0-6,0表示星期天
%u   星期几,1-7,7表示星期天
注意以上格式是可以任意组合的,还可以包括非格式串,比如 date "+今天是%Y-%d-%m,现在是$H:%M:%S"

更多格式 man date 或 info date
格式:date -d STRING
格式:date --date=STRING
格式:date -d STRING +FORMAT

显示用STRING指定的日期时间(display time described by STRING, not ‘now’)。
格式:date -s STRING
格式:date --set=STRING
设置当前时间为STRING指定的日期时间。

STRING可谓变化多样,支持很多种日期时间的描述方式。下面列举一些常用的日期表示方式,希望能够举一反三。
指定日期:
date -d YYYY-mm-dd
指定时间,日期是今天:
date -d HH:MM:SS

指定日期时间:
date -d "YYYY-mm-dd HH:MM:SS"
指定1970年以来的秒数:
date -d '1970-01-01 1251734400 sec utc'      (2009年 09月 01日 星期二 00:00:00 CST)
date -d '1970-01-01 1314177812 sec utc'      (2011年 08月 24日 星期三 17:23:32 CST)

今天:
date
date -d today
date -d now

明天:
date -d tomorrow
date -d next-day
date -d next-days
date -d "next day"
date -d "next days"
date -d "+1 day"
date -d "+1 days"
date -d "1 day"
date -d "1 days"
date -d "-1 day ago"
date -d "-1 days ago"

昨天:
date -d yesterday
date -d last-day
date -d last-days
date -d "last day"
date -d "last days"
date -d "-1 day"
date -d "-1 days"
date -d "1 day ago"
date -d "1 days ago"

前天:
date -d "2 day ago"
date -d "2 days ago"
date -d "-2 day"
date -d "-2 days"

大前天:
date -d "3 day ago"
date -d "3 days ago"
date -d "-3 day"
date -d "-3 days"

上周,一周前:
date -d "1 week ago"
date -d "1 weeks ago"

上个星期五(不是上周五):
date -d "last-friday"
date -d "last friday"

上月,一月前:
date -d last-month
date -d last-months
date -d "-1 month"
date -d "-1 months"

下月,一月后:
date -d next-month
date -d next-months
date -d "+1 month"
date -d "+1 months"

去年,一年前:
date -d last-year
date -d last-years
date -d "-1 year"
date -d "-1 years"

明年,一年后:
date -d next-year
date -d next-years
date -d "+1 year"
date -d "+1 years"

一小时前:
date -d "last-hour"
date -d "last-hours"
date -d "1 hour ago"
date -d "1 hours ago"

一小时后:
date -d "1 hour"
date -d "1 hours"

一分钟前:
date -d "1 minute ago"
date -d "1 minutes ago"

一分钟后:
date -d "1 minute"
date -d "1 minutes"

一秒前:
date -d "1 second ago"
date -d "1 seconds ago"

一秒后:
date -d "1 second"
date -d "1 seconds"


参考:date常用参数
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2013-06-05 12:01
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数

date +'%s'

1370404788


linux shell实现随机数多种方法(date,random,uuid)
一、通过时间获得随机数(date)
这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。
例子:
 
[chengmo@centos5  shell]$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。
  
[chengmo@centos5  shell]$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
  
[chengmo@centos5  shell]$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒
 
 
  
通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。
 
#!/bin/sh
  
#写个随机函数,调用方法random min max 
#在min 与 max直接获得随机整数
#copyright chengmo QQ:8292669
  
  
#获得随机数返回值,shell函数里算出随机数后,更新该值
function random()
{
    min=$1;
    max=$2-$1;
    num=$(date +%s+%N);
    ((retnum=num%max+min));
    #进行求余数运算即可
    echo $retnum;
    #这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值
    #还有一种返回,定义全价变量,然后函数改下内容,外面读取
}
  
#得到1-10的seq数据项
for i in {1..10};
do 
    out=$(random 2 10000);
    echo $i,"2-10000",$out;
done;
 
 
看看运行结果:
[chengmo@centos5  shell]$ sh testrandom.sh
1,2-10000,5600
2,2-10000,5295
3,2-10000,3432
4,2-10000,3148
5,2-10000,9041
6,2-10000,4290
7,2-10000,2380
8,2-10000,9009
9,2-10000,5474
10,2-10000,3664
一个循环里面,得到值各不相同。
这个是我们常用方法,适应各种语言,是一个通用算法,就算服务器不提供,某时刻相同唯一数据标记,我们也可以通过这种方法,做自己的伪随机数。下面还有更简单方法呢,不要我们自己做了。
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2017-09-28 11:38
date rfc-2822格式
示例: 以RFC 2822格式输出日期和时间

1. 原始格式
date
Thu Sep 28 11:35:09 CST 2017

2. rfc 2822 格式
date -R
Thu, 28 Sep 2017 11:35:11 +0800

3. 小结
对比,突出的是,rfc-2822 格式,含有时区;

参数
      -R, --rfc-2822
              output date and time in RFC 2822 format.  Example: Mon, 07 Aug 2006 12:34:56 -0600
#
游客

返回顶部