python和php常用的时间处理

来源:互联网 发布:淘宝订单体验 编辑:程序博客网 时间:2024/04/30 04:19

 在语言中常用的

1、无非时间戳(unix秒数)、

2、格式化字符串

3、便于各类运算的内置时间类型(在python中是时间数组对象、datetime对象)


面向时区、年、月、星期、日的处理通常较为生僻。啦啦啦 东八区比格林威治时间(UTC时间)要早8小时。。。


python的时间处理

 

不同于int,float,str,python没有包含对应日期和时间的内置类型,不过提供了三个模块。

time模块、datetime模块、calendar模块


python时间日期格式化符号


  python中时间日期格式化符号:

  %y 两位数的年份表示(00-99)

  %Y 四位数的年份表示(000-9999)

  %m 月份(01-12)

  %d 月内中的一天(0-31)

  %H 24小时制小时数(0-23)

  %I 12小时制小时数(01-12) 

  %M 分钟数(00=59)

  %S 秒(00-59)

  

  %a 本地简化星期名称

  %A 本地完整星期名称

  %b 本地简化的月份名称

  %B 本地完整的月份名称

  %c 本地相应的日期表示和时间表示

  %j 年内的一天(001-366)

  %p 本地A.M.或P.M.的等价符

  %U 一年中的星期数(00-53)星期天为星期的开始

  %w 星期(0-6),星期天为星期的开始

  %W 一年中的星期数(00-53)星期一为星期的开始

  %x 本地相应的日期表示

  %X 本地相应的时间表示

  %Z 当前时区的名称



1、time模块 

管理时钟时间的函数,绑定底层C库函数。一般用于表示时间的方式有两种:


第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的

第二种以时间数组对象的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同

tm_year=2015, 

tm_mon=12, 

tm_mday=7, 

tm_hour=14,

 tm_min=21, 

tm_sec=17, 

tm_wday=0,  (0-6, Monday is 0)

tm_yday=341, (day in the year, 1-366)

tm_isdst=0

time模块的函数就是围绕着这两种时间类型以及格式化字符串之间的转换而进行

time.time() 返回当前时间戳

返回一个浮点数unix时间戳,精度依赖于平台。不具有可读性。

ctime()可以将一个时间戳转成一个比较难读的时间字符串。各式是:%a %b %d %H:%M:%S %Y

>>> time.ctime(time.time()+30)

'Mon Dec  7 15:03:33 2015’


localtime(…)将时间戳转换成 或者返回当前时间数组


如果seconds参数未输入,则以当前时间为转换标准。



 mktime(tuple)时间数组转成时间戳



strftime(format[, tuple])将时间数组转成格式化字符串

>>> time.strftime("%Y-%m-%d",time.localtime())

'2015-12-07'


strptime(string, format) 格式化字符串转成时间数组

time.strptime("2015-12-07","%Y-%m-%d")

time.struct_time(tm_year=2015, tm_mon=12, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=341, tm_isdst=-1)



2、datetime模块

datetime模块包含了一些函数和类,用于完成日期和时间解析、格式化、算术运算。datetime类是date与time的结合体包含date和time类的所有信息。


时间类time

日期类date

时间日期类 datetime

时间日期间隔类 timedelta

时区信息对象 tzinfo


time类

time实例包含hour/minute/second/microsecond/tzinfo等属性。

 构造方法class datetime.time(hour[, minute[, second[, microsecond[, tzinfo]]]])

>>> t = datetime.time(1,2,3)

>>> t

datetime.time(1, 2, 3)

>>> t.hour

1

>>> t.minute

2

>>> t.second

3


date类


date构造方法 class datetime.date(year, month, day)

实例包含year/month/day属性。


datetime类


datetime类

datetime构造方法

datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]),各参数的含义与date、time的构造函数中的一样。datetime对象支持比较大小。


datetime.now返回一个当前的datetime对象

datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;

datetime.utcnow():返回一个当前utc时间的datetime对象;


datetime.fromtimestamp(timestamp[, tz]):时间戳转换成datetime对象

参数tz指定时区信息,

datetime.utcfromtimestamp(timestamp):根据时间戮创建一个UTC时间的datetime对象

>>> datetime.datetime.fromtimestamp(time.time())

datetime.datetime(2015, 12, 9, 18, 10, 50, 769130)

datetime.strptime(date_string, format):将格式字符串转换为datetime对象

>>> datetime.datetime.strptime("2015-12-09 12:00:00", "%Y-%m-%d %H:%M:%S")

datetime.datetime(2015, 12, 9, 12, 0)


t.timetuple() datetime对象转换成时间数组

>>> t = datetime.datetime.now()

>>> t.timetuple()

time.struct_time(tm_year=2015, tm_mon=12, tm_mday=9, tm_hour=18, tm_min=15, tm_sec=43, tm_wday=2, tm_yday=343, tm_isdst=-1)

datetime.utctimetuple() 返回utc时间数组



datetime.strftime(format) datetime对象转成格式字符串


timedelta类


timedelta代表两个datetime之间的时间差 。通过一个datetime和一个timedelta可以计算出另一个datetime。timedelta对象在内部按照日、秒、毫秒来存储。但是它有多个属性,通过构造函数传入。传入之后这些属性会转换成日、秒、毫秒来存储。

                                                   

>>> t1 = datetime.datetime.now()

>>> t2 = datetime.datetime.now()

>>> t2 - t1

datetime.timedelta(0, 12, 378169)

>>> t1 - t2

datetime.timedelta(-1, 86387, 621831)


>>> t = datetime.timedelta(hours=1)

>>> t

datetime.timedelta(0, 3600)

>>> t.hours

Traceback (most recent call last):

  File "<input>", line 1, in <module>

AttributeError: 'datetime.timedelta' object has no attribute 'hours'




>>> t = datetime.timedelta(hours=25,days=1)

>>> t

datetime.timedelta(2, 3600)


python2.7版本以后timedelta对象加入了total_seconds方法用于计算时间间隔的总秒数。


3、calendar模块(暂不讨论)


php的时间处理函数



Y 4位数字年,y为2位数字,如99即1999年

m 数字月份,前面有前导0,如01。n 为无前导0数字月份

d 月份中的第几天,前面有前导0,如03。j 为无前导0的天数

H 24小时格式,有前导0,h为12小时格式

i 分钟格式,有前导0

s 秒格式,有前导0

F 月份,完整的文本格式,例如 January 或者 March

M 三个字母缩写表示的月份,例如 Jan 或者 Mar

w 星期中的第几天,以数字表示,0表示星期天

z 年份中的第几天,范围0-366

W 年份中的第几周,如第32周

G 24小时格式,无前导0,g为对应12小时格式

A 大写上下午,如AM,a为小写



time()返回时间戳


localtime返回时间数组


array(9) {

  [0]=>

  int(32)

  [1]=>

  int(26)

  [2]=>

  int(20)

  [3]=>

  int(9)

  [4]=>

  int(11)

  [5]=>

  int(115)

  [6]=>

  int(3)

  [7]=>

  int(342)

  [8]=>

  int(0)

}


关联数组中不同的键名是:

"tm_sec" - 秒数

"tm_min" - 分钟数

"tm_hour" - 小时

"tm_mday" - 月份中的第几日

"tm_mon" - 年份中的第几个月,从 0 开始表示一月

"tm_year" - 年份,从 1900 开始

"tm_wday" - 星期中的第几天

"tm_yday" - 一年中的第几天

"tm_isdst" - 夏令时当前是否生效


date(format, timestamp)时间戳转换成格式化字符串

echo date(‘Y-m-d',time())


strtotime(timestr, now) 将时间描述字符串转换成时间戳

本函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳。

成功则返回时间戳,否则返回 FALSE。

这是正常的。。。


<?php

echo strtotime("2015-07-10 12:10");

echo strtotime("20150710 12:10");

echo strtotime("Wed Dec  9 20:17:44 2015”);


更牛的是。。。都尼玛说人话了


echo(strtotime("now"));

echo(strtotime("3 October 2005"));

echo(strtotime("+5 hours"));

echo(strtotime("+1 week"));

echo(strtotime("+1 week 3 days 7 hours 5 seconds"));

echo(strtotime("next Monday"));

echo(strtotime("last Sunday”));


0 0
原创粉丝点击