Hallo,
ich habe folgenden Codeausschnitt, der nichts anderes macht als Reminder in die Datenbank hinzuzufügen und anschließend für die nächsten 40 Tage Pushupbenachrichtigungen zu generieren. Dies sieht so aus:
int maxInstances = 40;
                        while(it.hasNext() && (!rule.isInfinite() || maxInstances-- > 0))
                        {
                            org.dmfs.rfc5545.DateTime nextInstance = it.nextDateTime();
                            //  System.out.println("XYZ: " + nextInstance.getDayOfMonth() + " " + nextInstance.getMonth() + " " + nextInstance.getYear());
                            Calendar newcal_from = Calendar.getInstance();
                            newcal_from.setTimeInMillis(dtstart);
                            newcal_from.set(Calendar.DAY_OF_MONTH, nextInstance.getDayOfMonth());
                            newcal_from.set(Calendar.MONTH, nextInstance.getMonth());
                            newcal_from.set(Calendar.YEAR, nextInstance.getYear());
                            long dtstart_new = newcal_from.getTimeInMillis();
                            if(reminders != null && reminders.size() > 0) {
                                for(int i = 0; i < reminders.size(); i++) {
                                    if(reminders.get(i) != null) {
                                        ContentValues reminderscontentvalues = new ContentValues();
                                        reminderscontentvalues.put(CalendarContract.Reminders.EVENT_ID, eventID);
                                        reminderscontentvalues.put(CalendarContract.Reminders.METHOD, reminders.get(i).getType());
                                        reminderscontentvalues.put(CalendarContract.Reminders.MINUTES, reminders.get(i).getMinutes());
                                        Uri uri3 = cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderscontentvalues);
                                        int reminderid = Integer.parseInt(uri3.getLastPathSegment());
                                        long scheduletime = dtstart_new - System.currentTimeMillis() - (reminders.get(i).getMinutes() * 60l * 1000l);
                                        if(scheduletime > 0l) {
                                            if(firstidused == false) {
                                                firstidused = true;
                                            }
                                            else {
                                                id = String.valueOf(getInstance(eventID, dtstart_new));
                                                System.out.println("InstanceID: " + id);
                                            }
                                            scheduleNotification(getNotification(title, Long.valueOf(id), dtstart_new), reminderid, scheduletime);
                                            System.out.println("GUT: Title " + title + " " + Long.valueOf(id) + " " + dtstart_new + " " + reminderid + " " + scheduletime);
                                        }
                                    }
                                }
                            }
                        }Die Funktionen scheduleNotification und getNotification sehen so aus:
private void scheduleNotification(Notification notification, int reminderid, long delay) {
        Intent notificationIntent = new Intent(this.c, NotificationPublisher.class);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, reminderid);
        notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this.c, reminderid, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        long futureInMillis = elapsedRealtime() + delay;
        AlarmManager alarmManager = (AlarmManager)this.c.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
    }
    private Notification getNotification(String title, long eventid, long timefrom) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(timefrom);
        Notification.Builder builder = new Notification.Builder(this.c);
        builder.setContentTitle(title);
        builder.setContentText(String.valueOf(DateHelper.singleNumber(cal.get(Calendar.DAY_OF_MONTH)) + "." + DateHelper.singleNumber(cal.get(Calendar.MONTH) + 1) + "." + DateHelper.singleNumber(cal.get(Calendar.YEAR)) + " " + String.valueOf(DateHelper.singleNumber(cal.get(Calendar.HOUR_OF_DAY)) + ":" + DateHelper.singleNumber(cal.get(Calendar.MINUTE)) + " Uhr")));
        builder.setSmallIcon(R.mipmap.ic_launcher);
        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        builder.setSound(alarmSound);
        System.out.println("WidgetPosition: " + new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
        Intent i = new Intent(this.c, MainActivity.class);
        i.putExtra("widgetposition", new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
        PendingIntent contentIntent = PendingIntent.getActivity(this.c, 0,
                i, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(contentIntent);
        return builder.build();
    }
Mein Problem ist jetzt folgendes:
Die erste Pushupnachricht hat ungefähr die Form:
"Terminkalender
Name des Termins
12.12.2017 18:25 Uhr"
Das klappt also ganz gut.
Aber dann, wenn ich auf die Pushupnachricht draufklicke, bekomme ich in der App die Variable "widgetposition" (siehe Zeile 26 im zweiten Ausschnitt) als 20.01.2018.[terminid].[zeitinmillisekunden].
Warum ruft Java den 20.01.2018 auf und nicht den 12.12.2017?
Im Prinzip mache ich doch mit der Zeile
builder.setContentText(String.valueOf(DateHelper.singleNumber(cal.get(Calendar.DAY_OF_MONTH)) + "." + DateHelper.singleNumber(cal.get(Calendar.MONTH) + 1) + "." + DateHelper.singleNumber(cal.get(Calendar.YEAR)) + " " + String.valueOf(DateHelper.singleNumber(cal.get(Calendar.HOUR_OF_DAY)) + ":" + DateHelper.singleNumber(cal.get(Calendar.MINUTE)) + " Uhr")));und dieser:
i.putExtra("widgetposition", new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
Das Gleiche.
Die Variable wird dann mit
if(dontshow == false) {
            this.datefromwidget = getIntent().getStringExtra("widgetposition");
            System.out.println("testÖ: " + this.datefromwidget);
        }
        if(this.datefromwidget != null) {
            System.out.println("Testk: " + this.datefromwidget);
            String[] split = datefromwidget.split(Pattern.quote("."));
            widgetid = split[3];
            widgetdtstart = Long.valueOf(split[4]);
            Calendar calen = Calendar.getInstance();
            TimeZone tz = calen.getTimeZone();
            widgetdtstart = widgetdtstart + tz.getOffset(widgetdtstart);
        }abgefangen. Die Ausgabe lautet dann "Tesk: 20.0.2017.[eventid].[timeinmillisekunden]"
Was falsch ist, ist das 20.0.2017. Die anderen beiden Parameter [eventid].[timeinmillisekunden] stimmen.
Was mache ich falsch? 
 
		