【发布时间】: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