在我的 Servicestack 应用程序中,我试图将数据库中的 Datetime 序列化为 RFC3339 标准。存储在数据库中的日期时间是本地时间。对于我的应用程序,数据库位于 2 个不同的位置,一个是 +7 偏移量的印度尼西亚,另一个是 +8 偏移量的马来西亚。两个数据库分别以本地时间存储。
相同的应用程序用于从不同位置为两个数据库提供服务。该应用程序的当地时间是偏移量+8,位于马来西亚。
当日期时间来自印度尼西亚数据库时,例如“2014-09-19 14:07:27.387”(下午 2 点),我会将偏移量 +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 应用程序将自动转换为应用程序本地时间,在 SerializeFn 之前变为“2014-09-19 15:07:27.387”(下午 3 点,应用程序本地时间偏移 +8) .
日期时间的小时数增加了 1 小时。经过相同 SerializeFn 的缓存输出值已变为“2014-09-19T15:07:27.3870000+07:00”(3pm+7)
由于 .NET 中的自动转换,印度尼西亚 +7 的缓存日期时间增加了数小时。
无论如何要确定 SerializeFn 中的来源在哪里?如果我以正确的方式做事,谁能指导我?提前致谢。