Ich baue eine Android-Anwendung und die Anwendung ermöglicht es dem Benutzer, Ereignisse in Google Kalender und externen Kalender (wie Exchange-Konto) einzufügen."Jahr 2038 _problem" in Google Kalender-API (Android-Anwendung)
Das Problem ist, wenn der Benutzer ein Ereignis nach 2038 hinzufügen möchte, erstellt das Ereignis in der Vergangenheit (zum Beispiel - Januar 2038 wird Dezember 1901 und 4. Juli 2038 wird 28. Mai 1902). Ich habe etwas recherchiert und festgestellt, dass das Problem "Year 2038 problem" ist.
Das Jahr-2038-Problem ist ein Problem für Rechen- und Datenspeicher Situationen, in denen Zeitwert gespeichert sind oder berechnet werden als vorzeichenbehaftete 32-Bit-Ganzzahl, und diese Zahl wird seit 00 wie die Anzahl der Sekunden interpretiert : 00: 00 UTC am 1. Januar 1970. Solche Implementierungen nicht mal nach dem 03.14.07 UTC am 19. Januar 2038.
Die neueste Zeit, die dargestellt werden können, in Unix der 32-Bit-integer-Zeit Format kodieren kann, ist 03:14:07 UTC am Dienstag, den 19. Januar 2038 (2.147.483.647 Sekunden nach dem 1. Januar 1970). Zeiten darüber hinaus "wrap around" und intern gespeichert werden als eine negative Zahl, die diese Systeme interpretieren als am 13. Dezember 1901 statt 19. Januar 2038 aufgetreten ist. Dies wird durch Integer-Überlauf verursacht.
Es scheint, dass mein Java-Code funktioniert und die Millisekunden ich sind in Ordnung, aber wenn ich die Werte an Google API insert
Funktion senden - ich denke, dass es nicht weiß, wie man damit umgehen und dann es fügt das Ereignis zum falschen Datum (Jahr 1901 und höher) ein. Gibt es eine Möglichkeit, damit umzugehen?
Dies ist mein Code:
private void InsertEvent(MyEvent myEvent) {
Uri EVENTS_URI = Uri.parse(getCalendarUriBase() + "events");
ContentValues eventValues = new ContentValues();
eventValues.put("eventTimezone", TimeZone.getDefault().getID());
eventValues.put("calendar_id", myEvent.calId);
eventValues.put("title",myEvent.title);
eventValues.put("allDay", 1);
long dateStart = myEvent.startDate.getTime(); // returns milliseconds - 2160248400000 for date 06/16/2038
eventValues.put("dtstart", dateStart);
long dateEnd = myEvent.endDate.getTime();
eventValues.put("dtend", dateEnd );
// At this point, in debug mode, I can see that the millisecond of dtstart and dtend are OK.
Uri u1 = contentResolver.insert(EVENTS_URI, eventValues); // API's function
}
Dies ist Google Dokumentation über ein Ereignis einfügen: http://developer.android.com/guide/topics/providers/calendar-provider.html#add-event
Was genau passiert? – SLaks
Warten Sie, bis die Spezifikation aktualisiert wurde und verwenden Sie 64-Bit-Integer? Jahr 2038 ist in Kalenderanwendungen * noch nicht genau relevant *. –
@SLaks - Zeiten nach Januar 2038 werden intern als negative Zahl gespeichert, wodurch das Ereignis im Dezember 1901 und nicht im Januar 2038 erstellt wird. – TamarG