【问题标题】:returning dateTime in local time instead of UTC with gSOAP使用 gSOAP 返回本地时间的 dateTime 而不是 UTC
【发布时间】:2017-11-22 08:35:02
【问题描述】:

我有一个使用 gSOAP 的肥皂服务器。其中一个请求在响应中包含xsd:dateTime 字段。这个dateTime 总是以UTC 返回,但我想在当地时间返回dateTime。我用本地时间填写字段time_t,然后将其转换为xsd:dateTime,gsoap 会自动将其转换为UTC。我可以改变这种行为吗?

this link 中,听起来gsoap 将始终使用UTC(“序列化程序会考虑并以UTC 表示time_t 值。”)。我也已经搜索了标志 here,但我找不到我的用例的标志。

【问题讨论】:

    标签: c++ datetime xsd timezone gsoap


    【解决方案1】:

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

    我没有测试过,但似乎要获得本地时间的输出,HAVE_GMTIME_RHAVE_GMTIME 需要未定义。

    【讨论】:

    • 好吧,这个方法真的很奇怪。根据平台更改输出格式听起来不是一个好主意。但是,您的建议效果很好。因为我不想更改激活了哪些宏,所以我基本上更改了 if 块的顺序,以便更喜欢对我有用的那个(它是 HAVE_FTIME 的那个)。非常感谢!
    【解决方案2】:

    要使用本地时间而不是格林威治标准时间,在./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

    【讨论】:

      【解决方案3】:

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

      不过,如果有人对如何编写这样的序列化程序有更好的解决方案或任何建议,请告诉我你的想法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2023-03-15
        • 2018-08-26
        • 2016-05-29
        相关资源
        最近更新 更多