私の Servicestack アプリケーションでは、日時をデータベースから RFC3339 標準にシリアライズしようとしています。データベースに格納されている日時は現地時間です。私のアプリケーションでは、データベースは 2 つの異なる場所にあります。1 つはインドネシアで +7 オフセット、もう 1 つはマレーシアで +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) になります。 .
datetime の時間が 1 時間増えました。同じ SerializeFn を経由するキャッシュからの出力値は「2014-09-19T15:07:27.3870000+07:00」 (3pm+7)
.NET での自動変換により、インドネシア +7 のキャッシュからの日時が数時間増加しました。
とにかく、SerializeFn のソースがどこにあるかを特定することはできますか? 私が正しい方法でやっているなら、誰かが私を導くことができますか? 前もって感謝します。