Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1096024
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: LINUX

2013-08-09 15:21:42

写脚本的时候会用到到但又不算太频繁,导致经常要去翻google....干脆都记下来

先是python的

点击(此处)折叠或打开

  1. >>> import time
  2. >>> print time.localtime()
  3. (2013, 8, 9, 14, 17, 30, 4, 221, 0)
  4. >>> print type(time.localtime())
  5. <type 'time.struct_time'>
  6. >>> curTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
  7. >>> print curTime
  8. 2013-08-09 14:17:11
  9. >>> print type(curTime)
  10. <type 'str'>
  11. >>> time.time()
  12. 1376029404.869349
  13. >>> print type(time.time())
  14. <type 'float'>
datetime
http://blog.csdn.net/jgood/article/details/5457284

点击(此处)折叠或打开

  1. >>> import datetime
  2. >>> datetime.datetime.now()
  3. datetime.datetime(2013, 8, 9, 14, 26, 47, 350944)
  4. >>> loli = datetime.datetime.now()
  5. >>> print loli
  6. 2013-08-09 14:26:57.998630
  7. >>> print type(loli)
  8. <type 'datetime.datetime'>
  9. >>> datetime.datetime.now()-loli
  10. datetime.timedelta(0, 40, 878765)
  11. >>> lolita = datetime.datetime.now()-loli
  12. >>> print lolita
  13. 0:00:48.414427
  14. >>> print lolita.days
  15. 0
  16. >>> print lolita.seconds
  17. 48
  18. >>> date_up = datetime.timedelta(days=3)
  19. >>> print type(date_up)
  20. <type 'datetime.timedelta'>
  21. >>> print date_up.days
  22. 3
  23. >>> lolicon = loli - date_up
  24. >>> print lolicon
  25. 2013-08-06 14:26:57.998630
  26. >>> print (lolicon>loli)
  27. False

顺便https://blog.lzhaohao.info/archive/performance-problem-with-strptime/
简单来说就通过正则把时间什么的纷纷作为int传给datetime处理,这样比strptime直接处理字符串要快
而且这样做最大的好处就是....pthon2.4里datetime没有strptime这个模块>_<

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. import datetime
  3. import os
  4. import re
  5. import timeit, cProfile
  6.  
  7. def strptime():
  8.     with open('time.txt', 'r') as f:
  9.         for line in f:
  10.             line = line.rstrip(os.linesep)
  11.             dt = datetime.datetime.strptime(line, "%Y-%m-%d %H:%M:%S")
  12.  
  13.  
  14. def reg():
  15.     rep = re.compile(r'(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})')
  16.     with open('time.txt', 'r') as f:
  17.         for line in f:
  18.             line = line.rstrip(os.linesep)
  19.             m = rep.match(line)
  20.             dt = datetime.datetime(int(m.group(1)),
  21.              int(m.group(2)),
  22.              int(m.group(3)),
  23.              int(m.group(4)),
  24.              int(m.group(5)),
  25.              int(m.group(6))
  26.              )
  27.  
  28. if __name__ == '__main__':
  29.  
  30.     t1 = timeit.Timer("reg()","from __main__ import reg")
  31.     t2 = timeit.Timer("strptime()", "from __main__ import strptime")
  32.  
  33.     cProfile.run("t1.timeit(3);print")
  34.     print""
  35.     cProfile.run("t2.timeit(3);print")

一些计算例子

点击(此处)折叠或打开

  1. #获取昨天的写法

  2. one_difference_day = datetime.timedelta(1,0,0)
  3. today = datetime.datetime.now()
  4. yesterday = today - one_difference_day

  5. #只要日期(这个的返回依旧是datetime类)
  6. yesterday.date()

  7. #分别获取年月日(注意yesterday有hour、minute、second等属性,yesterday.date()没有这些属性)
  8. print '%s-%s-%s' % (yesterday.year,yesterday.month,yesterday.day)

  9. #上面那个写法有明显缺点,就是小于10的日/月前面没0,改良写法
  10. print '%s' % yesterday.date().isoformat()

上面写法都是用datetime.date()把datetime类里的小时,分秒毫秒属性去除,还有另外一个方法
可以直接用datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])把小时,分秒毫秒属性设置成0,然后再计算。
更多用法参考http://blog.csdn.net/jgood/article/details/5457284


不同格式的字符串时间传换
str 转 datetime 用 datetime.datetime.strptime(str,'格式')
datetime 转str 用 datetime的方法 strftime('格式')

一个例子:一个字符串格式是30/Dec/2013,我们要把这个时间转换为2013-12-30
可以用如下转换方式
time_str = '30/Dec/2013'
log_date = datetime.datetime.strptime(time_str,'%d/%b/%Y').strftime('%Y-%m-%d')
上面的加上try还可以用于判断字符串是否为所指定的时间格式,中途转化为datetime以后还可以计算完毕再转换str

昨天的新写法,其实和上面差不多

点击(此处)折叠或打开

  1. today = datetime.datetime.now().date()
  2. difference_day = datetime.timedelta(days=1)
  3. yesterday = (today - difference_day).strftime('%Y-%m-%d')

上个月的计算方法,以及上个月天数的计算方法,比较常用

点击(此处)折叠或打开

  1. year = datetime.datetime.now().year
  2. last_moth = datetime.datetime.now().month - 1
  3. if last_moth == 0:
  4.     last_moth = 12
  5.     year -= 1
  6. day_long = (datetime.datetime(datetime.datetime.now().year, datetime.datetime.now().month, 01) -
  7.                 datetime.datetime(year, last_moth, 01)).days

unix时间转datetime
datetime.datetime.fromtimestamp(1396256636)
只算日期
datetime.date.fromtimestamp(1396256636)
混一起说明
print(datetime.datetime.fromtimestamp(int("1284101485")).strftime('%Y-%m-%d %H:%M:%S'))

datetime转unix时间比较麻烦,因为datetime本身不支持直接转unix时间,只能把datetime转成timetuple,再用time.mktime转换成unix时间
today = datetime.datetime.strptime('2014-09-27', '%Y-%m-%d')
int_today = time.mktime(compute_day.date().timetuple())


一个很好的说明图,转自
http://blog.sina.com.cn/s/blog_b09d460201018o0v.html







阅读(1869) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~