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