2016-09-14 8 views
0

私は予約をに保存しています。AppointmentCalendar.SaveAppointmentAsync(...)を使用しています。この予約はシリーズであり、Recurrenceの情報が含まれています。`Appointment.Recurrence.Until`は、保存して読み込んだ後に(予期せず)オフになるのはなぜですか?

アポイントを保存した直後に、同じカレンダーのGetAppointmentAsyncをアポイントのLocalIdで呼び出して、同じアポイントを再度取得します。

予想外の動作です:ロードされた予定に違いがあります。Recurrence.Untilの日付はであり、1つはです。 これはなぜですか?私は保存

Appointment

ここ

はJSONとしてシリアライズ関与予定です

{ 
    "Location": "", 
    "AllDay": false, 
    "Organizer": null, 
    "Duration": "00:45:00", 
    "Details": "", 
    "BusyStatus": 0, 
    "Recurrence": { 
     "Unit": 1, 
     "Occurrences": 260, 
     "Month": 1, 
     "Interval": 1, 
     "DaysOfWeek": 62, 
     "Day": 1, 
     "WeekOfMonth": 0, 
     "Until": "2016-12-31T01:00:00+01:00", 
     "TimeZone": "Europe/Budapest", 
     "RecurrenceType": 0, 
     "CalendarIdentifier": "" 
    }, 
    "Subject": "test", 
    "Uri": null, 
    "StartTime": "2016-01-04T11:30:00+01:00", 
    "Sensitivity": 0, 
    "Reminder": null, 
    "Invitees": {}, 
    "AllowNewTimeProposal": true, 
    "UserResponse": 0, 
    "RoamingId": "c,b,fd", 
    "ReplyTime": null, 
    "IsResponseRequested": true, 
    "IsOrganizedByUser": false, 
    "IsCanceledMeeting": false, 
    "OnlineMeetingLink": "", 
    "HasInvitees": false, 
    "CalendarId": "b,37,355", 
    "LocalId": "c,37,20a3", 
    "OriginalStartTime": null, 
    "RemoteChangeNumber": 0, 
    "DetailsKind": 0, 
    "ChangeNumber": 39537577 
} 

そして、ここではGetAppointmentAsyncを呼び出すことによって、それを取得した後Appointmentこの非常に同じです:

{ 
    "Location": "", 
    "AllDay": false, 
    "Organizer": null, 
    "Duration": "00:45:00", 
    "Details": "", 
    "BusyStatus": 0, 
    "Recurrence": { 
     "Unit": 1, 
     "Occurrences": 260, 
     "Month": 1, 
     "Interval": 1, 
     "DaysOfWeek": 62, 
     "Day": 1, 
     "WeekOfMonth": 0, 
     "Until": "2016-12-30T01:00:00+01:00", 
     "TimeZone": "Europe/Budapest", 
     "RecurrenceType": 0, 
     "CalendarIdentifier": "GregorianCalendar" 
    }, 
    "Subject": "test", 
    "Uri": null, 
    "StartTime": "2016-01-04T11:30:00+01:00", 
    "Sensitivity": 0, 
    "Reminder": null, 
    "Invitees": {}, 
    "AllowNewTimeProposal": true, 
    "UserResponse": 0, 
    "RoamingId": "c,b,fd", 
    "ReplyTime": null, 
    "IsResponseRequested": true, 
    "IsOrganizedByUser": false, 
    "IsCanceledMeeting": false, 
    "OnlineMeetingLink": "", 
    "HasInvitees": false, 
    "CalendarId": "b,37,355", 
    "LocalId": "c,37,20a3", 
    "OriginalStartTime": null, 
    "RemoteChangeNumber": 0, 
    "DetailsKind": 0, 
    "ChangeNumber": 39537577 
} 

これらのJSONを比較すると、Recurrenceの部分に2つの違いがあります:

CalendarIdentifierは、元の設定では保存されません(セッターはプライベートなので)。しかしもっと重要:Recurrence.Untilが違う! "2016-12-31T01:00:00 + 01:00" 予定の

Recurrence.Untilをロードした後: "2016-12-30T01:00:00 + 01:00" 保存する予定の

Recurrence.Until

1日が欠落しています。

これはなぜですか?予定を保存するときに何か必要なことはありますか?それとも悪いのですか:カレンダーや予定を持つのは端的なケースですか、現在の日付につながっているのでしょうか?

(SDKバージョン10.0.14393.0、勝利10周年記念)

答えて

1

私は私の側に多くのテストをしました。私のテストでは、前日の午前8時までの時間を設定すると、上記のようにrecurrence.untilの結果は1日ずれてしまいます。他の時間を設定すると正しい日が来ますが、実際に何時に設定しても問題ありません。得られる結果は午前8時です。詳細は以下のテスト結果をご覧ください。

enter image description here

それは(私のタイムゾーンはUTC + 8:00)のタイムゾーンに相対するようです。簡単な回避策は、untilを設定し、次のように日付を設定するだけです。recurrence.Until = UntilDatePicker.Date;untilに特定の時間を設定しないでください。実際には、untilを設定するときに、カレンダーアプリで手動で設定する場合でも、特定の時間は必要ありません。

enter image description here

私はまた、あなたがさらなるテストのためにダウンロードすることができますデモをアップロードします。

+0

親愛なる@Sunteen、これを見ていただきありがとうございます!残念ながら、私は内部で予定をバックアップしているので、予定を作成するためにUIを使用することはできません。そして、これは1:1のバックアップでなければならないので、 'Appointment'オブジェクトをすべてのプロパティで複製する必要があります。あなたの答えから、私は、私が欲しいところに行くために予定のタイムゾーンを試してみることができることがわかります。しかし、全体の動作がバグ、または少なくとも非直感的な動作のように見えるのではないですか? –

関連する問題