0

私の 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 のソースがどこにあるかを特定することはできますか? 私が正しい方法でやっているなら、誰かが私を導くことができますか? 前もって感謝します。

4

1 に答える 1