emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Rémi Vanicat" <vanicat@debian.org>
To: emacs-orgmode@gnu.org
Subject: [PATCH] Add explicit time zone to datetime exported to ical.
Date: Wed, 22 Dec 2010 09:24:08 +0100	[thread overview]
Message-ID: <87lj3ixljr.dlv@debian.org> (raw)

When exporting to ical, using localtime  is incompatible with some
software, using explicit universal time may failed with daylight
saving time, so we need another possibility, that is localtime with
explicit timezone.
---
 lisp/org-icalendar.el |   30 +++++++++++++++++++++---------
 1 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/lisp/org-icalendar.el b/lisp/org-icalendar.el
index d4034fe..1dfd3ed 100644
--- a/lisp/org-icalendar.el
+++ b/lisp/org-icalendar.el
@@ -194,12 +194,25 @@ When nil of the empty string, use the abbreviation retrieved from Emacs."
 	  (const :tag "Unspecified" nil)
 	  (string :tag "Time zone")))
 
-(defcustom org-icalendar-use-UTC-date-time ()
-  "Non-nil force the use of the universal time for iCalendar DATE-TIME.
-The iCalendar DATE-TIME can be expressed with local time or universal Time,
-universal time could be more compatible with some external tools."
+(defcustom org-icalendar-date-time-format ":%Y%m%dT%H%M%S"
+  "format-string for exporting icalendar DATE-TIME.
+See `format-time-string' for a full documentation. The only
+difference is that `org-icalendar-timezone' is used for %Z
+
+Interesting value are:
+ - \":%Y%m%dT%H%M%S\" for local time
+ - \";TZID=%Z:%Y%m%dT%H%M%S\" for local time with explicit timezone
+ - \":%Y%m%dT%H%M%SZ\" for time expressed in Universal Time"
+
   :group 'org-export-icalendar
-  :type 'boolean)
+  :type '(choice
+	  (const :tag "Local time" ":%Y%m%dT%H%M%S")
+	  (const :tag "Explicit local time" ";TZID=%Z:%Y%m%dT%H%M%S")
+	  (const :tag "Universal time" ":%Y%m%dT%H%M%SZ")
+	  (string :tag "Explicit format")))
+
+(defun org-icalendar-use-UTC-date-timep () 
+  (char-equal (elt org-icalendar-date-time-format (1- (length org-icalendar-date-time-format))) ?Z))
 
 ;;; iCalendar export
 
@@ -641,12 +654,11 @@ a time), or the day by one (if it does not contain a time)."
 		(setq h (+ 2 h)))
 	    (setq d (1+ d))))
 	(setq time (encode-time s mi h d m y)))
-      (setq fmt (if have-time (if org-icalendar-use-UTC-date-time 
-				  ":%Y%m%dT%H%M%SZ"
-				  ":%Y%m%dT%H%M%S")
+      (setq fmt (if have-time 
+		    (replace-regexp-in-string "%Z" org-icalendar-timezone org-icalendar-date-time-format)
 		    ";VALUE=DATE:%Y%m%d"))
       (concat keyword (format-time-string fmt time 
-					  (and org-icalendar-use-UTC-date-time 
+					  (and (org-icalendar-use-UTC-date-timep)
 					       have-time))))))
 
 (provide 'org-icalendar)
-- 
1.7.2.3

             reply	other threads:[~2010-12-22  8:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-22  8:24 Rémi Vanicat [this message]
2011-02-12 20:15 ` [Accepted] Add explicit time zone to datetime exported to ical Bastien Guerry
2011-02-12 20:16 ` [PATCH] " Bastien

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lj3ixljr.dlv@debian.org \
    --to=vanicat@debian.org \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).