日期的格式化问题

2018-03-07 16:05:10 +08:00
 dwjgwsm

from datetime import datetime t=datetime.now().date() #输出 2018-03-07 <class 'datetime.date'>

现在我的问题是如何将这个日期类型的输出格式化为另一种格式,比如 20180307,但是依然为日期类型!网上没见到一个人说怎么转换,全是介绍 strptime strftime 的,问题在于 strftime 输出的是字符串类型,我要的是输出日期类型的 20180307,怎么办呢?

2479 次点击
所在节点    问与答
16 条回复
xgzxy
2018-03-07 16:11:11 +08:00
import time

data = time.strftime('%Y-%m-%d', time.localtime(time.time()))
print data
# 2018-03-07
print ''.join(data.split('-'))
# 20180307
dwjgwsm
2018-03-07 16:25:25 +08:00
我要的是日期类型的输出!
xgzxy
2018-03-07 16:53:53 +08:00
import time

data = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
print data
# 2018-03-07-16-52-38
print ''.join(data.split('-'))
# 20180307165238
ysc3839
2018-03-07 16:54:52 +08:00
"20180307" 就是字符串,"日期类型"在内存中是一段不可打印的数据,你要输出就必须转换成字符串。
jackyzy823
2018-03-07 17:06:49 +08:00
subclass `datetime` 然后 override __str__ / __repr__
dwjgwsm
2018-03-07 17:19:25 +08:00
@ysc3839
from datetime import datetime

t=datetime.now().date()

print(t)
print(type(t)) #这个输出就是日期类型


@jackyzy823 不太明白这个是怎么弄的,__str__并不能绕过格式转换问题吧,问题是怎么转换?
ysc3839
2018-03-07 17:47:01 +08:00
@dwjgwsm 你说的应该是 @jackyzy823 的这种方法。
jackyzy823
2018-03-07 18:14:09 +08:00
print 的内部是调用 date 类的__str__方法… date 内置的格式是 %Y-%m-%d,所以你只能创建子类覆盖这个函数使用你的格式%Y%m%d。 如果你不强求,也可以使用 print(t.__format__("%Y%m%d"))
dwjgwsm
2018-03-07 21:47:17 +08:00
@jackyzy823 这个方法好!谢谢!
dwjgwsm
2018-03-07 21:57:12 +08:00
tt=t.__format__("%Y%m%d")
print(type(tt)) #输出字符串
看来 python 没有好的什么好办法了
jackyzy823
2018-03-07 23:54:15 +08:00
@dwjgwsm
```
class StrDate(date):
def __str__(self):
return self.__format__("%Y%m%d")

t = StrDate.today()
print(t)
print(isinstance(t,date))
```
geelaw
2018-03-08 02:34:42 +08:00
#10 和原本的内容里面,问题本身就是错误的。

数据和数据的表示是两个概念,就像你不能说二进制的 10 和十进制的 2 是不同的整数,只不过 10 和 2 是同一个整数的不同表示。

意思同 #4
TigerS
2018-03-08 05:04:25 +08:00
@dwjgwsm
> tt=t.__format__("%Y%m%d")
> print(type(tt)) #输出字符串

你对这个的理解不太对?
当你 t=datetime.now().date() 的时候,print(t) 等同于 print(str(t))
而 print(type(t)) 是 <type 'datetime.date'> 不代表 str(t) 是 date

同理你上面的应该是
tt = t
print(tt.__format__("%Y%m%d")) 和 print(type(tt)) 的比较

这里将原本的 str(t) 变换为 str(t)
TigerS
2018-03-08 05:05:11 +08:00
@TigerS 笔误:这里将原本的 str(t) 变换为 t.__format__("%Y%m%d") 而已
DravenJohnson
2018-03-08 05:37:00 +08:00
dwjgwsm
2018-03-08 10:12:35 +08:00
明白了,谢谢各位!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/435810

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX