Resolver problema con los timezone del calendario Outlook en Calcurse

Microsoft Outlook no utiliza la misma sintaxis de zona horaria que los sistemas UNIX. Eso implica, que al importar un calendario de Outlook a Calcurse, se vea que las horas de las entradas configuradas en el calendario están retrasadas o adelantadas. Algo problemático en una aplicación de calendario. Por ejemplo, alguien en Berlín usará una zona horaria en Outlook denominada “W. Europe Standard Time/Europe” mientras que en calcurse debería de ser “Europe/Berlin”.

Por lo tanto, esto debe ser editado antes de importar el calendario procedente de Outlook en Calcurse, veamos qué pasos se deben seguir.

Identificar la zona horario en formato UNIX. Para ello, si no la conocemos o queremos asegurarnos, podemos usar tzselect y seguir los pasos de manera interactiva.

tzselect 

Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Asia
 5) Atlantic Ocean
 6) Australia
 7) Europe
 8) Indian Ocean
 9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the timezone using the Posix TZ format.

#? 7

Please select a country whose clocks agree with yours.
 1) Åland Islands	  11) Czech Republic	    21) Ireland		      31) Monaco		41) Serbia
 2) Albania		  12) Denmark		    22) Isle of Man	      32) Montenegro		42) Slovakia
 3) Andorra		  13) Estonia		    23) Italy		      33) Netherlands		43) Slovenia
 4) Austria		  14) Finland		    24) Jersey		      34) North Macedonia	44) Spain
 5) Belarus		  15) France		    25) Latvia		      35) Norway		45) Svalbard & Jan Mayen
 6) Belgium		  16) Germany		    26) Liechtenstein	      36) Poland		46) Sweden
 7) Bosnia & Herzegovina  17) Gibraltar		    27) Lithuania	      37) Portugal		47) Switzerland
 8) Britain (UK)	  18) Greece		    28) Luxembourg	      38) Romania		48) Turkey
 9) Bulgaria		  19) Guernsey		    29) Malta		      39) Russia		49) Ukraine
10) Croatia		  20) Hungary		    30) Moldova		      40) San Marino		50) Vatican City

#? 16

Please select one of the following timezones.
1) Swiss time
2) Germany (most areas)

#? 2

The following information has been given:

	Germany
	Germany (most areas)

Therefore TZ='Europe/Berlin' will be used.
Selected time is now:	Wed Jun  8 19:21:28 CEST 2022.
Universal Time is now:	Wed Jun  8 17:21:28 UTC 2022.
Is the above information OK?
1) Yes
2) No

#? 1

You can make this change permanent for yourself by appending the line
	TZ='Europe/Berlin'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:

Europe/Berlin <-----------

Si se está usando fichero icalc (extensión .ics) para exportar/importar el calendario, se debe abrir con un editor de texto y localizar la zona horaria usada por MS Outlook. Simplemente buscar las lineas con el campo “TZID”.

curl -qs "https://outlook.office365.com/owa/calendar/1ffdecf5d38@XXXXXX.com/07fae9b891/calendar.ics" | grep -i tzid | head -n 1
TZID:W. Europe Standard Time

Una vez identificado, en este ejemplo “W. Europe Standard Time” se puede usar el comando sed para editar de manera automática dicha cadena de texto.

sed -i 's/W. Europe Standard Time/Europe\/Berlin/g' calendar.ics

Veamos un ejemplo de como quedarían todos los pasos juntos para una importación de calendario desde Microsoft Outlook. En este caso es un pequeño script que se ejecuta con un cronjob para tener el calendario actualizado a diario.

# Se borra la actual configuración si existiera.
rm -r $HOME/calendar.ics
# Se descarga el calendario de MS Outlook.
wget -O $HOME/calendar.ics "https://outlook.office365.com/owa/calendar/1ffde9adcd1162a0f488eecf5d38@XXXXXX.com/07fae9b8fa064d9acaa61971ce2992175691274739091/calendar.ics"
# Se adapta la zona horaria a nuestras necesidades.
sed -i 's/W. Europe Standard Time/Europe\/Berlin/g' calendar.ics # Necesario para que funcione correctamente.
# Se eliminan las entradas del calendario importado anteriormente.
rm -fr $HOME/.calcurse_XXXX/*
# Se realiza la importación del nuevo calendario.
calcurse -D $HOME/.calcurse_curro -i $HOME/calendar.ics