all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: How to compare time of last file modification?
Date: Sun, 01 Jul 2012 03:16:11 +0200	[thread overview]
Message-ID: <87bok0nuw4.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: mailman.3790.1341102956.855.help-gnu-emacs@gnu.org

Thorsten Jolitz <tjolitz@googlemail.com> writes:

> Hi List, 
> the Elisp manual tells me about file-attributes:
>
>
>      4. The time of last access, as a list of two integers. The
>         first integer has the high-order 16 bits of time, the
>         second has the low 16 bits. (This is similar to the value
>         of current-time; see Time of Day.) Note that on some
>         FAT-based filesystems, only the date of last access is
>         recorded, so this time will always hold the midnight of the
>         day of last access.
>        
>      5. The time of last modification as a list of two integers (as
>         above). This is the last time when the file's contents were
>         modified.
>
>
> If I want to compare the time of last modification of two files - how do
> I do that, using these two integers? 

You have to apply some powerful magic, called "maths".

If I were you, I'd not read the following of that message, it's much too
esoteric.



The first time is characterized with this system of equations:

  t₁ =  65536×h₁ + l₁
  0 ≤ h₁ < 65536
  0 ≤ l₁ < 65536

The second time with this similar system:

  t₂ =  65536×h₂ + l₂
  0 ≤ h₂ < 65536
  0 ≤ l₂ < 65536


Comparing those times is adding this equation to the above system:

  t₁ < t₂
  t₁ =  65536×h₁ + l₁
  0 ≤ h₁ < 65536
  0 ≤ l₁ < 65536
  t₂ =  65536×h₂ + l₂
  0 ≤ h₂ < 65536
  0 ≤ l₂ < 65536

So we have to solve a system of equations with 3 variables and 7
equations.

I told you do not read further!


              t₁ < t₂           ∧  t₁ =  65536×h₁ + l₁ ∧  t₂ =  65536×h₂ + l₂
  ⇔  65536×h₁+l₁ < 65536×h₂+l₂  ∧  t₁ =  65536×h₁ + l₁ ∧  t₂ =  65536×h₂ + l₂


Now, notice that: 

      ∀n, 65536×(n+1) + 0 > 65536×n + 65535
  ⇔  ∀n, 65536×n + 65536 > 65536×n + 65535
  ⇔  ∀n,           65536 > 65535
  ⇔  true

Similarly, 

      ∀n,p  n > p ⇒ 65536×n + 0          > 65536×p + 65535
  ⇔  ∀n,p  n > p ⇒ 65536×(n-p+p)        > 65536×p + 65535
  ⇔  ∀n,p  n > p ⇒ 65536×(n-p)+65536×p  > 65536×p + 65535
  ⇔  ∀n,p  n > p ⇒ 65536×(n-p) > 65535
  ⇔  ∀n,p  n > p ⇒ 65536×(n-p) ≥ 65536 > 65535
  ⇔  ∀n,p  n > p ⇒ true
  ⇔  true

Therefore, if h₂ > h₁ then t₂ > t₁
       and if h₁ > h₂ then t₁ > t₂

Now, if h₂ = h₁, then 

        t₁ < t₂ ∧ t₁ =  65536×h₁ + l₁ ∧ t₂ =  65536×h₂ + l₂ ∧ h₁ = h₂

  ⇔  65536×h₁+l₁ < 65536×h₁+l₂  ∧  t₁ =  65536×h₁ + l₁ 
                               ∧  t₂ =  65536×h₂ + l₂ ∧ h₁ = h₂

  ⇔  l₁ < l₂  ∧  t₁ =  65536×h₁ + l₁ ∧  t₂ =  65536×h₂ + l₂ ∧ h₁ = h₂


Therefore, if h₂ > h₁ then t₂ > t₁
           if h₁ > h₂ then t₁ > t₂
           if h₁ = h₂ then if l₁ < l₂ then t₁ < t₂
                          if l₁ > l₂ then t₁ > t₂
                          if l₁ = l₂ then t₁ = t₂

Does this look like an "algorithms"?  I told you, dark magic here!


    (defun time-lessp (t1 t2)
      "Returns whether t1<t2
    t1 and t2 are lists of two integers. The first integer has the
    high-order 16 bits of time, the second has the low 16 bits."
      (destructuring-bind (h1 l1) t1
        (destructuring-bind (h2 l2) t2
           (cond
             ((< h1 h2) t)
             ((> h1 h2) nil)
             (t (cond ((< l1 l2) t)
                      (t         nil)))))))


-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
A bad day in () is better than a good day in {}.


       reply	other threads:[~2012-07-01  1:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.3790.1341102956.855.help-gnu-emacs@gnu.org>
2012-07-01  1:16 ` Pascal J. Bourguignon [this message]
2012-07-01  8:56   ` How to compare time of last file modification? Thorsten Jolitz
2012-07-01  9:23   ` Michael Albinus
2012-07-01 10:13 ` Lars Magne Ingebrigtsen
2012-07-01 17:26   ` Thorsten Jolitz
     [not found]   ` <mailman.3833.1341163416.855.help-gnu-emacs@gnu.org>
2012-07-01 17:36     ` Pascal J. Bourguignon
2012-07-01 21:11       ` Lars Magne Ingebrigtsen
2012-07-01 19:48     ` Barry Margolin
2012-07-01 20:26       ` Thorsten Jolitz
2012-07-01  0:38 Thorsten Jolitz
2012-07-01  0:41 ` Thorsten Jolitz

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

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

  git send-email \
    --in-reply-to=87bok0nuw4.fsf@kuiper.lan.informatimago.com \
    --to=pjb@informatimago.com \
    --cc=help-gnu-emacs@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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.