Hi, May I bump up this thread (and its inlined, older, corollary)?
Best regards, Seb "Sebastien Vauban" wrote: > "Sebastien Vauban" wrote: >> Bastien wrote: >>> "Sebastien Vauban" writes: >>> >>>> I think this is it... >>> >>> Yes.. but in fact, this is precisely the difference between the `t' and the >>> `T' flags - the latter displays seconds while the former display the output >>> according to `org-table-duration-custom-format', which you can customize. >>> Sorry I didn't mention this before. >> >> I have the impression you mixed, in the above, seconds with *fraction of* >> seconds: >> >> - the flag `T' currently means HH:MM:SS, while >> - the flag `t' currently means "fractional time" of hours (by default). >> >> As you say, `t' may be further customized: >> >> ┏━━━━ >> ┃ org-table-duration-custom-format is a variable defined in >> `org-table.el'. >> ┃ Its value is hours >> ┃ >> ┃ Documentation: >> ┃ Format for the output of calc computations like $1+$2;t. >> ┃ The default value is 'hours, and will output the results as a >> ┃ number of hours. Other allowed values are 'seconds, 'minutes and >> ┃ 'days, and the output will be a fraction of seconds, minutes or >> ┃ days. >> ┗━━━━ >> >> Hence, you really have 5 cases: >> >> - t, fraction of days >> - t, fraction of hours >> - t, fraction of minutes >> - t, fraction of seconds >> - T, HH:MM:SS >> >> Those 5 cases are currently handled (in that order) in the following >> function: >> >> (defun org-table-time-seconds-to-string (secs &optional output-format) >> "Convert a number of seconds to a time string. >> If OUTPUT-FORMAT is non-nil, return a number of days, hours, >> minutes or seconds." >> (let* ((secs0 (abs secs)) >> (res >> (cond ((eq output-format 'days) >> (format "%.3f" (/ (float secs0) 86400))) >> ((eq output-format 'hours) >> (format "%.2f" (/ (float secs0) 3600))) >> ((eq output-format 'minutes) >> (format "%.1f" (/ (float secs0) 60))) >> ((eq output-format 'seconds) >> (format "%d" secs0)) >> (t (org-format-seconds "%.2h:%.2m:%.2s" secs0))))) >> (if (< secs 0) (concat "-" res) res))) >> >> My patch just addressed the HH:MM:SS format (that is, the `T' flag). >> It does not impact the fractional representation of time (the `t' flag). > > I just had to look at some table using time references : > > | 08:30 | 09:00 | > | 09:30 | | > > As the end time on the first line is equal to the beginning time on the second > one, I try using a formula to copy the time: > > | 08:30 | 09:00 | > | #ERROR | | > #+TBLFM: @2$1=@1$2 > > The above does not work because Calc makes a division of 9 by 0, as -- by > default, without an explicit format -- data is considered as numeric, right? > > Hence, I need to use the T flag, but this doesn't look right yet: > > | 08:30 | 09:00 | > | 09:00:00 | | > #+TBLFM: @2$1=@1$2;T > > This is what the above patch is supposed to solve. > > BTW, I tried other variants: > > 1. replacing `:' by `h' > > | 08h30 | 09h00 | > | 9 h00 | | > #+TBLFM: @2$1=@1$2 > > Weird that the 9 is moved away from the `h'. I can accept that the leading > 0 is removed, though. > > 2. ... and using a string format: > > | 8h30 | 9h00 | > | 9 | | > #+TBLFM: @2$1=@1$2;%s > > Another weird results for me... > > Isn't there any way to say "copy verbatim the contents" of that field? -- Sebastien Vauban