python 如何将字符串转化为datetime.date

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 如何将字符串转化为datetime.date相关的知识,希望对你有一定的参考价值。

比较省事的办法是用time模块的strptime方法来解析日期字符串成为时间对象,然后再把年月日部分提取出来,最后生成datetime.date对象。

# 方法1, 用time模块的strptime方法来解析日期字符串成为时间对象
import time, datetime
date_str = '2017-10-19'
fmt = '%Y-%m-%d'
time_tuple = time.strptime(date_str, fmt)
year, month, day = time_tuple[:3]
a_date = datetime.date(year, month, day)
print(a_date, type(a_date))

# 方法2, 直接把日期字符串拆分转换成 年/月/日 对应的整数
import datetime
date_str = '2017-10-19'
print(datetime.date(*map(int, date_str.split('-'))))

参考技术A

python 如何将字符串转化为datetime.date需要分”字符串与time类型的转换“和”time类型与datetime类型的转换“两种情况。

为了从字符串中提取时间,并进行比较,因此有了这个问题,如何将字符串转换成datetime类型

1.字符串与time类型的转换

>>> import time
>>> timestr = "time2009-12-14"
>>> t = time.strptime(timestr, "time%Y-%m-%d")
>>> print t
(2009, 12, 14, 0, 0, 0, 0, 348, -1)

>>> type(t)
<type 'time.struct_time'>
>>>

如代码所示使用strptime进行转换,第一个参数是要转换的字符串,第二个参数是字符串中时间的格式与之对应的有函数strftime,是将time类型转换相应的字符串

    下面是格式化符号汇总

%a 星期几的简写 Weekday name, abbr.
%A 星期几的全称 Weekday name, full
%b 月分的简写 Month name, abbr.
%B 月份的全称 Month name, full
%c 标准的日期的时间串 Complete date and time representation
%d 十进制表示的每月的第几天 Day of the month
%H 24小时制的小时 Hour (24-hour clock)
%I 12小时制的小时 Hour (12-hour clock)
%j 十进制表示的每年的第几天 Day of the year
%m 十进制表示的月份 Month number
%M 十时制表示的分钟数 Minute number
%S 十进制的秒数 Second number
%U 第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)
%w 十进制表示的星期几(值从0到6,星期天为0)weekday number
%W 每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)
%x 标准的日期串 Complete date representation (e.g. 13/01/08)
%X 标准的时间串 Complete time representation (e.g. 17:02:10)
%y 不带世纪的十进制年份(值从0到99)Year number within century
%Y 带世纪部分的十制年份 Year number
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。Name of time zone
%% 百分号

2.time类型与datetime类型的转换

这一步比较简单,使用datetime函数,代码如下

>>> import datetime
>>> d = datetime.datetime(* t[:6])
>>> print d
2009-12-14 00:00:00

>>> type(d)
<type 'datetime.datetime'>
>>>

备忘:*表示将列表中的数据作为函数的参数,**表示将字典的数据作为函数的参数传入

参考资料

python 字符串和datetime转换.CSDN博客[引用时间2017-12-28]

参考技术B 你的应用程序接受字符串格式的输入,但是你想将它们转换为 datetime 对象以便在上面执行非字符串操作。

解决方案

使用Python的标准模块 datetime 可以很容易的解决这个问题。比如:

>>> from datetime import datetime
>>> text = '2012-09-20'
>>> y = datetime.strptime(text, '%Y-%m-%d')
>>> z = datetime.now()
>>> diff = z - y
>>> diff
datetime.timedelta(3, 77824, 177393)
>>>
讨论

datetime.strptime() 方法支持很多的格式化代码, 比如 %Y 代表4位数年份, %m 代表两位数月份。 还有一点值得注意的是这些格式化占位符也可以反过来使用,将日期输出为指定的格式字符串形式。

比如,假设你的代码中生成了一个 datetime 对象, 你想将它格式化为漂亮易读形式后放在自动生成的信件或者报告的顶部:

>>> z
datetime.datetime(2012, 9, 23, 21, 37, 4, 177393)
>>> nice_z = datetime.strftime(z, '%A %B %d, %Y')
>>> nice_z
'Sunday September 23, 2012'
>>>
还有一点需要注意的是, strptime() 的性能要比你想象中的差很多, 因为它是使用纯Python实现,并且必须处理所有的系统本地设置。 如果你要在代码中需要解析大量的日期并且已经知道了日期字符串的确切格式,可以自己实现一套解析方案来获取更好的性能。 比如,如果你已经知道所以日期格式是 YYYY-MM-DD ,你可以像下面这样实现一个解析函数:

from datetime import datetime
def parse_ymd(s):
year_s, mon_s, day_s = s.split('-')
return datetime(int(year_s), int(mon_s), int(day_s))
实际测试中,这个函数比 datetime.strptime() 快7倍多。 如果你要处理大量的涉及到日期的数据的话,那么最好考虑下这个方案!

以上就是Python如何将字符串转换为日期的详细内容,
参考技术C $ python
Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dtstr = '2014-02-14 21:32:12'
>>> datetime.datetime.strptime(dtstr, "%Y-%m-%d %H:%M:%S").date()
datetime.date(2014, 2, 14)
>>>

参考技术D 这是很多初学者都关注的问题,但又是一个很难回答的问题,问题的核心是采取什么标准来衡量一个人是否已经入门。

以知识量的多少来衡量是不是可行呢?有些人走马观花一般学了很多python基础,概念上都有所了解,可一旦让他动手写代码,他却错误连篇,所谓的概念上有所了解,其实都是一知半解,不求甚解。

以实际动手能力来衡量,是不是可行呢?应该说比以知识量多少来衡量要务实很多,毕竟学习python就是为了写代码去做一些事情,如果代码写不出来,还算什么入门呢,这样的入门还有什么意义呢?

实际动手能力,听起来合情合理,但不免过于笼统,啥叫实际动手能力呢?我认为可以将动手能力划分为以下几部分

理解问题的能力
组织代码的能力
理解代码的能力
2. 入门检测
下面,通过一个题目,来检测一下你的入门程度

题目要求如下:

请写程序接收用户的标准输入,用户会输入两个int类型数据,中间用空格分开,程序需计算这两个数相加的和,并在屏幕上以指定格式输出结果:x + y = z,x, y 就是用户的输入,z是程序算出来的和。

完成这个题目,既需要你具备足够的知识量,也需要你具备组织代码和理解代码的能力。

首先,你得知道接收用户的输入需要使用input函数,该函数返回的数据是字符串类型,这个字符串里包含了用户输入的两个int类型数据,中间用逗号分隔因此你需要对数据进行解析。最合理的方法是使用字符串的split方法将字符串分隔,分隔后得到一个列表,列表里有两个数据,仍然是字符串类型。

接下来需要使用int函数将列表里的数据转成int类型并实现求和操作。

最后,你需要按照要求输出结果,你要用到字符串格式化。

示例代码如下

value = input("请输入两个整数,中间用逗号分隔:")
arrs = value.split()

num_sum = int(arrs[0]) + int(arrs[1])
print("x + y= z".format(x=arrs[0], y=arrs[1], z=num_sum))
我前面之所以强调入门的能力中包括理解代码的能力,因为你只是刚刚入门,还需要更多的学习和实践,那么阅读他人的代码就是你学习提升的必经之路,理解代码要达到以下几个标准

清楚的知道每一个变量,每一个数据的数据类型
清楚的知道每一个函数,方法的作用
清楚的知道每一行代码的意图
如果你做不到以上3点中的任意一点,我不能说你还不入门,只是你后续的学习障碍会很多,提升会很慢。

3、熟练是最好的理解
任何技能,都无法只通过听,看就能掌握,更多的是需要反复的实践,最终达到熟练,没有比熟练更好的理解,所以我建议你选择入门教程时,选择练习题比较多的那种,只有多练习才能熟练,在熟练的过程中做到理解,记忆,转化为自己的知识。

如果你所学的教程没有那么多练习题,或者是觉得练习题不够用,怎么办呢?福利来了,我自己搜集编写了一套130道python练习题,难度适中,覆盖面广,每道题目都有细致的讲解和答案,很适合新手练习提升。

python时间处理,datetime中的strftime/strptime

python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime

1、由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()

技术分享

2、由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()

技术分享

3、两个函数都涉及日期时间的格式化字符串,列举如下:

%a 星期几的简写;如 星期三为Web 
%A 星期几的全称;如 星期三为Wednesday 
%b 月份的简写; 如4月份为Apr 
%B 月份的全称; 如4月份为April 
%c 标准的日期的时间串;(如: 04/07/10 10:43:39) 
%C 年份的后两位数字 
%d 十进制表示的每月的第几天 
%D 月/天/年 
%e 在两字符域中,十进制表示的每月的第几天 
%F 年-月-日 
%g 年份的后两位数字,使用基于周的年 
%G 年分,使用基于周的年 
%h 简写的月份名 
%H 24小时制的小时 
%I 12小时制的小时 
%j 十进制表示的每年的第几天 
%m 十进制表示的月份 
%M 十时制表示的分钟数 
%n 新行符 
%p 本地的AM或PM的等价显示 
%r 12小时的时间 
%R 显示小时和分钟:hh:mm 
%S 十进制的秒数 
%t 水平制表符 
%T 显示时分秒:hh:mm:ss 
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0) 
%U 第年的第几周,把星期日做为第一天(值从0到53) 
%V 每年的第几周,使用基于周的年 
%w 十进制表示的星期几(值从0到6,星期天为0) 
%W 每年的第几周,把星期一做为第一天(值从0到53) 
%x 标准的日期串 
%X 标准的时间串 
%y 不带世纪的十进制年份(值从0到99) 
%Y 带世纪部分的十制年份 
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。 
%% 百分号




































以上是关于python 如何将字符串转化为datetime.date的主要内容,如果未能解决你的问题,请参考以下文章

python中如何把datetime.datetime转换成datetime.time?

python时间处理,datetime中的strftime/strptime

python中datetime模块中的strftime与strptime

python中datetime模块中的strftime与strptime

python中datetime模块中的strftime与strptime

python 字符串转变时间