【问题标题】:ServiceStack - DateTime SerializeFn from Cache different from DatabaseServiceStack - 来自缓存的 DateTime SerializeFn 与数据库不同
【发布时间】:2014-06-23 09:35:46
【问题描述】:

在我的 Servicestack 应用程序中,我试图将数据库中的日期时间序列化为 RFC3339 标准。 存储在数据库中的日期时间是本地时间。对于我的应用程序,数据库位于 2 个不同的位置,一个是 +7 偏移量的印度尼西亚,另一个是 +8 偏移量的马来西亚。两个数据库分别以当地时间存储。

相同的应用程序用于从不同位置为两个数据库提供服务。该应用程序的当地时间是offset +8,位于马来西亚。

当日期时间来自印度尼西亚数据库时,例如 "2014-09-19 14:07:27.387"(2pm),我会将偏移量 +7 附加到 "2014- 09-19T14:07:27.3870000+07:00"(下午 2 点 + 7 点)。以下是 SerializeFn 的代码

JsConfig<DateTime?>.SerializeFn = time =>
        {
            if (time != null)
            {
                DateTimeOffset dateTimeOffset = DateTimeZone.GetDateTimeOffset((DateTime)time, CommonFunction.GetDbCountryCode());
                return string.Format("{0:O}", dateTimeOffset);
            }
            return null;
        };

GetDateTimeOffset 函数代码:

    public static DateTimeOffset GetDateTimeOffset(DateTime dateTime, string country)
    {
        switch (country.ToUpper())
        {
            case "ID":
                return new DateTimeOffset(dateTime, TimeSpan.FromHours(+7));
            default:
                return new DateTimeOffset(dateTime, TimeSpan.FromHours(+8)); ;
        }
    }

然后 Redis 将该值缓存为 "2014-09-19T14:07:27.3870000+07:00"(2pm+7)。后续请求将从 Redis 缓存值中获取,.NET 应用程序将自动转换为应用程序本地时间,即 "2014-09-19 15:07:27.387"(下午 3 点,应用程序本地时间为在 SerializeFn 之前偏移 +8)。

日期时间的小时数增加了 1 小时。经过同一个 SerializeFn 的缓存输出值变成了 "2014-09-19T15:07:27.3870000+07:00"(3pm+7)

由于 .NET 中的自动转换,印度尼西亚 +7 缓存中的日期时间增加了数小时。

是否无论如何要确定 SerializeFn 中的来源在哪里?如果我以正确的方式做事,谁能指导我? 提前致谢。

【问题讨论】:

    标签: servicestack servicestack.redis


    【解决方案1】:

    找到解决方案。添加了 DeserializeFn 以处理缓存中的数据。并且之前有一些部分遗漏了代码更改导致解决方案不起作用。

            DateTimeOffset dto = JsonSerializer.DeserializeFromString<DateTimeOffset>(time);
            DateTime temp = new DateTime(dto.UtcDateTime.Ticks, DateTimeKind.Utc);
            return DateTimeZone.ConvertDateTimeZoneFromUTC(CommonFunction.GetDbCountryCode(), temp);
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2016-05-17
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多