使用gSOAP以本地时间而不是UTC返回dateTime

时间:2017-11-22 08:35:03

标签: c++ datetime xsd timezone gsoap

我有一个使用gSOAP的soap服务器。其中一个请求在响应中包含xsd:dateTime字段。此dateTime始终以UTC格式返回,但我希望在本地时间返回dateTime。我用当地时间time_t填充该字段,但随后将其转换为xsd:dateTime,gsoap会自动将其转换为UTC。我可以改变这种行为吗?

this link中,听起来像gsoap将始终使用UTC(" A time_t值被视为并由序列化器以UTC表示。")。我也已经搜索了here标志,但我找不到用例的标志。

3 个答案:

答案 0 :(得分:0)

在内部soap_dateTime2s函数(as found here)的实现中,它似乎测试了几个配置标志(在config.h中可设置)。

我还没有经过测试,但似乎要按照当地时间输出,HAVE_GMTIME_RHAVE_GMTIME需要定义。

答案 1 :(得分:0)

要使用本地时间而非格林尼治标准时间,请在./configure之后更改config.h,如下所示:

/* Define to 1 if you have the `gmtime' function. */
//#define HAVE_GMTIME 1
#undef HAVE_GMTIME

/* Define to 1 if you have the `gmtime_r' function. */
//#define HAVE_GMTIME_R 1
#undef HAVE_GMTIME_R

然后使用gsoap,现在soap_dateTime2s将返回本地时间。

喜欢

  

2017-10-24T02:28:41Z将返回为2017-10-24T10:28:41 + 08:00

答案 2 :(得分:-1)

似乎我想拥有的并不那么容易。我假设我需要为xsd:dateTime编写自己的自定义序列化程序,类似于this link中的示例。

但是,如果某人有更好的解决方案或有关如何编写此类序列化程序的任何建议,请告诉我您的想法。