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