强制suds使用朴素日期时间

1 投票
2 回答
2323 浏览
提问于 2025-04-17 05:30

我正在尝试使用suds来调用一个网络服务,但遇到了一个问题,希望这里有人能帮我解决。

简单来说,我们需要传递一个日期时间对象,以确定服务停止的日期,但问题是suds在生成的字符串末尾强制加上了-4时区(这是脚本所在计算机的正确时区)。然而,我们的服务提供商似乎错误地解读了这个,导致日期提前了一天。

我们之前用php调用过这个网络服务,传递了一个简单的“日期时间”对象(基本上就是像“YYYY-mm-dd HH:mm:ss”这样的字符串),那样是没问题的,这说明时区可能是导致问题的原因。

所以我想真正的问题是,如何让suds使用一个简单的日期时间对象,或者使用不同的时区(我怀疑服务器是配置为UTC时区,这可能是问题的根源)。

提前感谢大家的帮助!

2 个回答

0

我知道这个讨论已经很久了。不过,你可能想看看下面这个链接:https://fedorahosted.org/suds/ticket/353

Suds在处理日期和时间方面似乎有点傻乎乎的。

1

我一直在为这个问题苦恼。我在Lib\site-packages\suds\sax\date.py文件的第297行做了修改。我把self.__adjust()这一行注释掉了,现在它就不会根据时区来调整时间了。

    if isinstance(date, basestring):
        part = date.split('T')
        Date.__init__(self, part[0])
        Time.__init__(self, part[1], 0)
        self.datetime = \
            dt.datetime.combine(self.date, self.time)
        # self.__adjust()
        return
    raise ValueError, type(date)

之前我得到的是“2013-04-16T23:00:00”,现在我得到了正确的值“2013-04-17T00:00:00”。

撰写回答