日期上午下午怎么用date存_Python系统:日期和时间2

f0e60d73eca0da5148def0e3f24f1a25.png

“一起学习,一起成长!“

【连续“Python系统:日期和时间1”】

3. 读写日期和时间

3.1 strftime()的格式化字符串

可以使用strftime()把日期和时间转换成字符串。这个方法在datetime,date,time对象中都有,在time模块中也有。strftime()使用格式化字符串来指定输出。

格式化字符串 日期/时间单元 范围

%Y 年 1900-..

%m 月 01-12

%B 月名 January

%b 月名缩写 Jan,...

%d 日 01-31

%A 星期 Sunday

%a 星期缩写 Sun,...

%H 时(24小时制) 00-23

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

%p 上午/下午 AM,PM

%M 分 00-59

%S 秒 00-59

数字都是左侧补零。

3.2time模块中的strftime()函数:把struct_time对象转换成字符串

strftime()函数:

把struct_time对象转换成字符串。

import time

fmt="It's %A,%B %d,%Y,local time %I:%M:%S%p"

t=time.localtime()

t

Out[31]: time.struct_time(tm_year=2018, tm_mon=7, tm_mday=1, tm_hour=12, tm_min=26, tm_sec=33, tm_wday=6, tm_yday=182, tm_isdst=0)

time.strftime(fmt,t)

Out[32]: "It's Sunday,July 01,2018,local time 12:26:33PM"

3.3 date对象的strftime()函数:只能获取日期部分,时间默认是午夜

date对象的strftime()函数:只能获取日期部分,时间默认是午夜。

from datetime import date

some_day=date(2014,7,4)

fmt="It's %B %d,%Y,local time %I:%M:%S%p"

some_day.strftime(fmt)

Out[37]: "It's July 04,2014,local time 12:00:00AM"

3.4time对象只会转换时间部分

from datetime import time

some_time=time(10,35)

some_time.strftime(fmt)

Out[40]: "It's January 01,1900,local time 10:35:00AM"

如果要把字符串转换成日期或者时间,可以对同样的格式化字符串使用strptime()函数。这里不能使用正则表达式,字符串的非格式化部分(没有%的部分)必须完全匹配。

import time

fmt="%Y-%m-%d"

time.strptime("2012 01 29",fmt)

Traceback (most recent call last):

File "<ipython-input-43-e30fa5587874>", line 1, in <module>

#目标字符串中用空格代替破折号,解析式时会报错:

time.strptime("2012 01 29",fmt)

File "E:anocondalib_strptime.py", line 559, in _strptime_time

tt = _strptime(data_string, format)[0]

File "E:anocondalib_strptime.py", line 362, in _strptime

(data_string, format))

ValueError: time data '2012 01 29' does not match format '%Y-%m-%d'

#如果传入strptime()字符串中有破折号,可以正常解析。

time.strptime("2012-01-29",fmt)

Out[44]: time.struct_time(tm_year=2012, tm_mon=1, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=29, tm_isdst=-1)

#即使字符串看起来可以匹配格式,但如果超出取值范围也会报错

time.strptime("2012-13-29",fmt)

Traceback (most recent call last):

File "<ipython-input-45-7c19c6368395>", line 1, in <module>

time.strptime("2012-13-29",fmt)

File "E:anocondalib_strptime.py", line 559, in _strptime_time

tt = _strptime(data_string, format)[0]

File "E:anocondalib_strptime.py", line 362, in _strptime

(data_string, format))

ValueError: time data '2012-13-29' does not match format '%Y-%m-%d'

1) 目标字符串中用空格代替破折号,解析式时会报错

2) 如果传入strptime()字符串中有破折号,可以正常解析。

3) 即使字符串看起来可以匹配格式,但如果超出取值范围也会报错

4) 名称通过locale设置,这时操作系统中的国际化设置。

5) setlocale()设置:打印出不同的月和日名称。

名称通过locale设置,这时操作系统中的国际化设置。如果要打印出不同的月和日名称,可以通过setlocale()设置来修改。

这个函数的第一个参数是locale.LC_TIME。表示设置的是日期和时间。

第二个参数是一个结合了语言和国家名称的缩写字符串。

#为什么会报错,可能是模块发生变化,查证一下。

>>> import locale

>>> from datetime import date

>>> halloween=date(2014,10,31)

>>> for lang_country in ['en_us','fr_fr','de_de','es_es','is_is',]:

... locale.setlocale(locale.LC_ALL,lang_country)

... halloween.strftime('%A,%B %d')

...

'en_us'

'Friday,October 31'

'fr_fr'

'vendredi,octobre 31'

'de_de'

'Freitag,Oktober 31'

'es_es'

'viernes,octubre 31'

'is_is'

'föstudagur,október 31'

上述红色部分书上是错误的,应该是更新了的缘故。

6) 获取lang_country的方法(有好几百种)

获取lang_country所有值:

>>> import locale

>>> names=locale.locale_alias.keys()

查看前五:

>>> good_names=[name for name in names if len(name)==5 and name[2]=='_']

>>> good_names[:5]

['a3_az', 'aa_dj', 'aa_er', 'aa_et', 'af_za']

4. 其他模块

如果觉得标准库模块不好用或者没有想要的功能,可以试试下面这些第三方模块:

arrow(http://crsmithdev.com/arrow/)

这个模块有许多日期和时间函数,并提供了简单易用的API

dateutil(http://labix.org/python-dateutil)

这个模块可以解析绝大多数日期格式,并且可以很好地处理相对日期和时间

iso8601(https://pypi.python.org/pypi/iso8601)

这个模块会完善标准库中对于ISO8601格式的处理

fleming(http://github.com/anbitioninc/fleming)

这个模块提供许多时区函数

「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「诚邀关注“issnail”,会有惊喜哦!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」
参考书目:python语言及其应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值