FicIcsTimestamps - konvertiert Export aus Google Kalender für Import in
Nextcloud
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
package de.tilman.scripting;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/*
|
||||
#41237 - Chor montags 17:30 ==> lokale Zeitzone, Zielformat
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=Europe/Berlin:20200914T173000
|
||||
DTEND;TZID=Europe/Berlin:20200914T183000
|
||||
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20210621T215959Z;BYDAY=MO
|
||||
DTSTAMP:20200914T174410Z
|
||||
UID:6hijie346lh3ib9p6pim6b9k75im2bb2c8rj0bb360q68d9h6gqjed9k6c@google.com
|
||||
CREATED:20200911T140024Z
|
||||
DESCRIPTION:<font color="#FB8C00">●</font>
|
||||
LAST-MODIFIED:20200911T140024Z
|
||||
LOCATION:Hardenbergstraße 33
|
||||
SEQUENCE:0
|
||||
STATUS:CONFIRMED
|
||||
SUMMARY:Anton Staats- und Domchor Probe
|
||||
TRANSP:OPAQUE
|
||||
END:VEVENT
|
||||
|
||||
#36351 Elternabend Jacob 11.3. 17:00-19:00 (Winterzeit) ==> muss konvertiert werden
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20200311T160000Z
|
||||
DTEND:20200311T180000Z
|
||||
DTSTAMP:20200914T174410Z
|
||||
UID:hrkrr1f67h1a38abhruogfjucdcdvoa03mm9187a22161l95ppftu64u8s@google.com
|
||||
CREATED:20200106T155150Z
|
||||
DESCRIPTION:<font color="#FB8C00">●</font>
|
||||
LAST-MODIFIED:20200106T155151Z
|
||||
LOCATION:
|
||||
SEQUENCE:0
|
||||
STATUS:CONFIRMED
|
||||
SUMMARY:Elternabend Jacob
|
||||
TRANSP:OPAQUE
|
||||
END:VEVENT
|
||||
|
||||
#43692 Geburtstag Moritz 2.10. 14:45-18:30 (Sommerzeit) ==> muss konvertiert werden
|
||||
BEGIN:VEVENT
|
||||
DTSTART:20201002T124500Z
|
||||
DTEND:20201002T163000Z
|
||||
DTSTAMP:20200914T174410Z
|
||||
UID:svt4q8rt5go36p78rkmtmu3gcs82t82bi5druln2hpq8tp1ldj96m2ea2h@google.com
|
||||
CREATED:20200914T141118Z
|
||||
DESCRIPTION:<font color="#FB8C00">●</font>
|
||||
LAST-MODIFIED:20200914T141119Z
|
||||
LOCATION:Dockx 3D Schwarzlicht Minigolf\nOrdensmeisterstr. 1-3
|
||||
SEQUENCE:0
|
||||
STATUS:CONFIRMED
|
||||
SUMMARY:Kindergeburtstag Moritz (Anton)
|
||||
TRANSP:OPAQUE
|
||||
END:VEVENT
|
||||
*/
|
||||
|
||||
public class FixIcsTimestamps {
|
||||
|
||||
private final static Logger log = LoggerFactory.getLogger(FixIcsTimestamps.class);
|
||||
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmssZ");
|
||||
|
||||
String filePath = "/home/tilman/Schreibtisch/00 Temp/2019-10-20 Anica Kalender-Archiv/2020-09-14 Kalender-Backup tilman.liero@gmail.com.ical/Familie_tero23q0dqqfc45r4jjcecl7bs@group.calendar.google.com.ics";
|
||||
int counter = 0;
|
||||
int dtval = 0;
|
||||
int utcEntry = 0;
|
||||
int tzEntry = 0;
|
||||
int lineCounter = 1;
|
||||
|
||||
public FixIcsTimestamps() {
|
||||
log.info("Reading file " + filePath);
|
||||
|
||||
BufferedReader reader;
|
||||
List<String> outLines = new ArrayList<String>();
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(filePath));
|
||||
String line = reader.readLine();
|
||||
|
||||
while (line != null) {
|
||||
if (line.equals("BEGIN:VEVENT")) {
|
||||
List<String> appointment = new ArrayList<String>();
|
||||
appointment.add(line);
|
||||
|
||||
while (!line.equals("END:VEVENT")) {
|
||||
line = reader.readLine();
|
||||
lineCounter++;
|
||||
|
||||
if (line.startsWith("DTSTART:")) { // UTC, muss konvertiert werden
|
||||
utcEntry++;
|
||||
|
||||
String startDate = line.substring(8, 24);
|
||||
Date date = dateFormat.parse(startDate.replaceAll("Z$", "+0000"));
|
||||
|
||||
String convertedStartDate = "DTSTART;TZID=Europe/Berlin:" + dateFormat.format(date).substring(0,15);
|
||||
appointment.add(convertedStartDate);
|
||||
|
||||
log.info("input " + line + ", converted: " + convertedStartDate);
|
||||
} else if (line.startsWith("DTEND:")) { // UTC, muss konvertiert werden
|
||||
String endDate = line.substring(6, 22);
|
||||
Date date = dateFormat.parse(endDate.replaceAll("Z$", "+0000"));
|
||||
|
||||
String convertedEndDate = "DTEND;TZID=Europe/Berlin:" + dateFormat.format(date).substring(0,15);
|
||||
appointment.add(convertedEndDate);
|
||||
} else { // no conversion
|
||||
if (line.startsWith("DTSTART;VALUE=DATE:")) { // ganztägiger Termin
|
||||
dtval++;
|
||||
} else if (line.startsWith("DTSTART;TZID=")) { // Local Timezone
|
||||
tzEntry++;
|
||||
}
|
||||
|
||||
appointment.add(line);
|
||||
}
|
||||
}
|
||||
|
||||
outLines.addAll(appointment);
|
||||
|
||||
counter++;
|
||||
}
|
||||
else {
|
||||
outLines.add(line);
|
||||
}
|
||||
|
||||
line = reader.readLine();
|
||||
lineCounter++;
|
||||
}
|
||||
|
||||
reader.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
log.info("Counter: " + counter);
|
||||
log.info("DTVAL: " + dtval);
|
||||
log.info("UTC: " + utcEntry);
|
||||
log.info("TZ: " + tzEntry);
|
||||
log.info("DTVAL + UTC + TZ = " + (dtval + utcEntry + tzEntry));
|
||||
|
||||
|
||||
for (String line : outLines) {
|
||||
System.out.println(line);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new FixIcsTimestamps();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user