2016-09-14 3 views
0

Ich speichere einen Termin zu einem AppointmentCalendar mit AppointmentCalendar.SaveAppointmentAsync(...). Dieser Termin ist der Master einer Serie mit Recurrence Informationen.Warum ist `Appointment.Recurrence.Until` (unerwartet) um eins nach dem Speichern und Laden?

Gleich nach dem Speichern des Termins ich den gleichen Termin wieder abrufen, indem Sie GetAppointmentAsync auf dem gleichen Kalender mit dem Termin LocalId aufrufen.

Hier ist das unerwartete Verhalten: Es gibt einen Unterschied in der geladenen Termin: Recurrence.Until Datum ist aus durch eine. Warum ist das?

Hier sind die beteiligten Termine als JSON serialisiert:

Die Appointment ich sparen:

{ 
    "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 
} 

Und hier ist genau diese Appointment, nachdem es das Abrufen von GetAppointmentAsync Aufruf:

{ 
    "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 
} 

Wenn Sie diese JSONs umgehen, erhalten Sie zwei Unterschiede im Recurrence Teil:

CalendarIdentifier ist im ursprünglichen Termin leer, um zu speichern (weil der Setter privat ist). Aber noch wichtiger: Recurrence.Until unterscheidet sich!

Recurrence.Until für Termin zu speichern: "2016-12-31T01: 00: 00 + 01: 00"

Recurrence.Until Termin nach dem Laden: "2016-12-30T01: 00: 00 + 01: 00"

Ein Tag fehlt.

Warum ist das? Gibt es noch etwas, das ich beim Speichern des Termins tun muss? Oder schlimmer: Ist es nur ein Randfall mit meinen Kalendern und Terminen, vielleicht sogar mit dem aktuellen Datum verbunden?

(SDK Version 10.0.14393.0, Win 10 Anniversary)

Antwort

1

Ich habe viele Tests auf meiner Seite. In meinen Tests, wenn ich die Zeit bis zum Tag vor 8:00 Uhr einstelle, wird das Ergebnis der recurrence.until wie oben gezeigt um einen Tag abweichen, die Einstellung der anderen Zeit wird den richtigen Tag bekommen, egal zu welcher Zeit Sie die Zeit einstellen Ergebnis ist 8:00 Uhr. Details entnehmen Sie bitte dem folgenden Testergebnis.

enter image description here

Es auf die Zeitzone relativ scheint (meine Zeitzone UTC + 8: 00). Die einfache Problemumgehung ist, wenn Sie die until einstellen, setzen Sie das Datum einfach wie folgt: , stellen Sie die spezifische Zeit nicht auf until ein. Eigentlich brauchen wir die spezifische Zeit nicht, wenn wir die until einstellen, auch wenn wir sie manuell in der Kalender-App einstellen.

enter image description here

Ich lade auch eine Demo Sie für weitere Tests herunterladen.

+0

Sehr geehrte @Sunteen, danke für den Blick in diese! Leider kann ich keine Benutzeroberfläche verwenden, um Termine zu erstellen, da ich Termine intern sichern möchte. Und das muss eine 1: 1 Sicherung sein, also muss ich "Termin" Objekte mit all seinen Eigenschaften duplizieren. Aus Ihrer Antwort sehe ich, dass ich mit den Zeitzonen der Termine experimentieren könnte, um dahin zu kommen, wo ich will. Aber sieht das ganze Verhalten nicht wie ein Fehler oder zumindest nicht intuitives Verhalten aus? –

Verwandte Themen