首先,请不要在时区中流量不知道日期时间对象.你会感到痛苦,不是今天,也许不是明天,而是某一天.你可以从别人的错误中学习(我的),或者你可以学到很多困难.据我所知,Python允许你在没有时区的情况下制作日期时间对象是一个错误.
第二,strptime不处理时区!所以你做了正确的事情,然后你以某种格式写了你的日期,并想把它读回来,并且kablooey,你得到’%z格式错误的字符串’.格儿.
使用iso8601库来解析ISO8601日期时间字符串.时区处理.
第三,Jsonpickle没有清楚地记录如何滚动你自己的DatetimeHandler.所以,是的,你只是想要一些易读的东西,你发送到Javascript或其他什么?上面的解决方案没问题.你想要的东西是清晰的,但你也想在某些时候把它拉回到Python中?嗯,比较棘手.
这里有一个提示:当您继承库以扩展其功能时,请仔细查看您正在扩展的超类.
我会以不同的方式编写DatetimeHandler.但是下面的作品,包含了我在这个主题上所有来之不易的智慧.哎哟.
import pytzimport Jsonpickleimport iso8601from datetime import datetimeclass Blah(object): def __init__(self,blah): self.datetime = datetime.Now(pytz.utc) self.blah = blah def to_Json(self): return Jsonpickle.encode(self) @classmethod def from_Json(cls,Json_str): return Jsonpickle.decode(Json_str)class DatePickleISO8601(Jsonpickle.handlers.DatetimeHandler): def flatten(self,obj,data): pickler = self.context if not pickler.unpicklable: return unicode(obj) cls,args = obj.__reduce__() flatten = pickler.flatten payload = obj.isoformat() args = [payload] + [flatten(i,reset=False) for i in args[1:]] data['__reduce__'] = (flatten(cls,reset=False),args) return data def restore(self,data): cls,args = data['__reduce__'] unpickler = self.context restore = unpickler.restore cls = restore(cls,reset=False) value = iso8601.parse_date(args[0]) return valueJsonpickle.handlers.registry.register(datetime,DatePickleISO8601)总结
以上是内存溢出为你收集整理的python – jsonpickle datetime到可读的json格式全部内容,希望文章能够帮你解决python – jsonpickle datetime到可读的json格式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)