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 ![]() 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 明白了,谢谢各位! |