Linux时间转化(date和unix时间)笔记

时间相关参数列表

%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区 %a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

Linux date命令转换时间

  • date指定格式输出
$ date +"%Y-%m-%d %H:%M:%S"
2014-11-21 23:59:37

将日期转换为Unix时间戳

  • 当前时间转换成unix时间戳:
$ date +%s

1361542433
  • 转换指定日期为Unix时间戳:
$ date -d "2008-01-01 00:00:00" +%s
1199116800

$ date -d 2008-01-01 +%s
1199116800

$ date -d 20080101 +%s
1199116800

例外: 有一种场景date格式是连续的(没找到date命令怎么转换成unix)

$ echo 20080101010101 | awk '{print substr($0,1,4)"-"substr($0,5,2)"-"substr($0,7,2)" "substr($0,9,2)":"substr($0,11,2)":"substr($0,13,2) }'

2008-01-01 01:01:01

$ date -d "2008-01-01 01:01:01" +%s
1199120461

将Unix时间戳转换为日期时间

  • 指定输出格式
$ date -d @1199116800 +"%Y-%m-%d %H:%M:%S"
2008-00-01 00:00:00
  • 当前时间转换成指定格式
date -d @`date +%s` +"%Y-%m-%d %H:%M:%S"
等价于
date +"%Y-%m-%d %H:%M:%S"

日期格式之间转换

$ date -d "2008-01-01 00:00:00" +%Y-%M-%d" "%H:%M:%S
2008-00-01 00:00:00

$ date -d "2008-01-01 00:00:00" +"%Y%M%d %H%M%S"
20080001 000000

$ date -d "2008-01-01 00:00:00" +"%Y/%M/%d %H:%M:%S"
2008/00/01 00:00:00

Python时间转换

  • 获取当前主机unix time
time.mktime(datetime.datetime.now().timetuple())
  • unix time转datetime
def unixtime_to_datetime(utime):
    return datetime.datetime.fromtimestamp(utime)

def unixtime_to_datetime_str(utime, fmt='%Y-%m-%d %H:%M:%S'):
    return datetime.datetime.fromtimestamp(int(utime)).strftime(fmt)
  • datetime转unix time
def datetime_to_unixtime(dtime, fmt='%Y-%m-%d %H:%M:%S'):
    return time.mktime(datetime.datetime.strptime(dtime , fmt).timetuple())
  • datetime间隔
stime = datetime.datetime.fromtimestamp(stime_unix)
etime = datetime.datetime.fromtimestamp(etime_unix)

_interval_days = (etime - stime).hours + 1
_interval_days = (etime - stime).days + 1
  • datetime获取当天日期
dtime = datetime.datetime.fromtimestamp(etime_unix)
dtime.date() # 2016-02-14
  • 获取今天/明天/昨天日期
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
yesterday = today - datetime.timedelta(days=1)

标签:none