Earlier in org-capture-fill-template, there is the following:

(let* (...
       (ct (org-capture-get :default-time))
       ...

The property :default-time defaults to the current time and is overwritten by file+datetree+prompt, 

If ct was passed as a 2nd argument to format-time-string in your code snippet:

      ;; The current time
      (goto-char (point-min))
      (while (re-search-forward "%<\\([^>\n]+\\)>" nil t)
        (replace-match (format-time-string (match-string 1) ct) t t))


this should provide the behavior I'm looking for with file+datetree+prompt, but still use the current time for other capture types. Will this solution break anything?

Shankar

On Wed, Nov 4, 2015 at 2:15 PM, Nick Dokos <ndokos@gmail.com> wrote:
Shankar Rao <shankar.rao@gmail.com> writes:

> For the following org capture template:
>
> (setq org-capture-templates
>       '(("d" "Date Tree Test" plain
> (file+datetree+prompt "~/org/testdt.org")
> "This date should be the date i picked: %<%y%m%d>")))
>
> Though this is filed under the correct date in the datetree, no matter what date I select in the prompt,
> the date displayed in the template is the current date. Is this a bug or a feature?
>

It's a feature I guess - org-capture.el says:

      ;; The current time
      (goto-char (point-min))
      (while (re-search-forward "%<\\([^>\n]+\\)>" nil t)
        (replace-match (format-time-string (match-string 1)) t t))

and there is no provision for another time to be given here. I don't
think there is any provision in the template for a time other than the
current time: at least I can't see a %-escape that takes a different
time.

--
Nick