from datetime import datetime t=datetime.now().date() #输出 2018-03-07 <class 'datetime.date'>
现在我的问题是如何将这个日期类型的输出格式化为另一种格式,比如 20180307,但是依然为日期类型!网上没见到一个人说怎么转换,全是介绍 strptime strftime 的,问题在于 strftime 输出的是字符串类型,我要的是输出日期类型的 20180307,怎么办呢?
1
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 |
2
dwjgwsm OP 我要的是日期类型的输出!
|
3
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 |
4
ysc3839 2018-03-07 16:54:52 +08:00
"20180307" 就是字符串,"日期类型"在内存中是一段不可打印的数据,你要输出就必须转换成字符串。
|
5
jackyzy823 2018-03-07 17:06:49 +08:00 1
subclass `datetime` 然后 override __str__ / __repr__
|
6
dwjgwsm OP @ysc3839
from datetime import datetime t=datetime.now().date() print(t) print(type(t)) #这个输出就是日期类型 @jackyzy823 不太明白这个是怎么弄的,__str__并不能绕过格式转换问题吧,问题是怎么转换? |
7
ysc3839 2018-03-07 17:47:01 +08:00
@dwjgwsm 你说的应该是 @jackyzy823 的这种方法。
|
8
jackyzy823 2018-03-07 18:14:09 +08:00 via Android
print 的内部是调用 date 类的__str__方法… date 内置的格式是 %Y-%m-%d,所以你只能创建子类覆盖这个函数使用你的格式%Y%m%d。 如果你不强求,也可以使用 print(t.__format__("%Y%m%d"))
|
9
dwjgwsm OP @jackyzy823 这个方法好!谢谢!
|
10
dwjgwsm OP tt=t.__format__("%Y%m%d")
print(type(tt)) #输出字符串 看来 python 没有好的什么好办法了 |
11
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)) ``` |
12
geelaw 2018-03-08 02:34:42 +08:00 via iPhone
#10 和原本的内容里面,问题本身就是错误的。
数据和数据的表示是两个概念,就像你不能说二进制的 10 和十进制的 2 是不同的整数,只不过 10 和 2 是同一个整数的不同表示。 意思同 #4 |
13
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) |
15
DravenJohnson 2018-03-08 05:37:00 +08:00
|
16
dwjgwsm OP 明白了,谢谢各位!
|