Emacs e Git mostram a hora errada no Windows

O Emacs está a duas horas de folga da hora do sistema. Eu tentei google para o problema, mas sem sorte. O que preciso configurar para corrigir isso? Eu suspeito que esta seja a diferença do GMT para onde eu moro (eu estou na zona GMT + 2, ou seja, se eu subtrair do tempo do sistema 2, eu terei o tempo no Emacs). Então ... talvez sejam algumas configurações de localidade?

Eu apenas baguncei um repositório git por causa disso: commits feitos através demagit usou o tempo do Emacs, e os colocou antes dos commits feitos por outra pessoa :(

Aqui, adicionei uma captura de tela mostrando a diferença. A saída dodate é a hora correta, mas o tempo na franja modeline está errado.

EDIT0:

Parece que Stefan está certo, e o tempo no Git não está ligado ao tempo no Emacs (a imagem abaixo é do terminal Cygwin).

Essa questão é tão relevante para o Git quanto para o Emacs - de alguma forma, eles estão usando alguma API do sistema que fica fora de sincronia no meu PC - e isso é algo que preciso configurar para alinhá-los. A questão é qual é a configuração que ambos usam?

EDIT1:

Aqui está o código que o Emacs usa para recuperar o tempo, afaik:

/* Emulate gettimeofday (Ulrich Leodolter, 1/11/95).  */
int
gettimeofday (struct timeval *__restrict tv, struct timezone *__restrict tz)
{
  struct _timeb tb;
  _ftime (&tb);

  tv->tv_sec = tb.time;
  tv->tv_usec = tb.millitm * 1000L;
  /* Implementation note: _ftime sometimes doesn't update the dstflag
     according to the new timezone when the system timezone is
     changed.  We could fix that by using GetSystemTime and
     GetTimeZoneInformation, but that doesn't seem necessary, since
     Emacs always calls gettimeofday with the 2nd argument NULL (see
     current_emacs_time).  */
  if (tz)
    {
      tz->tz_minuteswest = tb.timezone; /* minutes west of Greenwich  */
      tz->tz_dsttime = tb.dstflag;  /* type of dst correction  */
    }
  return 0;
}

E parece que ficatz errado. Eu não sei o que_ftime é - mas não parece ser definido nas fontes do Emacs, isso deve vir de outro lugar ...

Mais algumas pesquisas:

O SBCL instalado pela MSI fornece isto:

(defconstant *day-names*
    '("Monday" "Tuesday" "Wednesday"
      "Thursday" "Friday" "Saturday" "Sunday"))
(multiple-value-bind
    (second minute hour date month year day-of-week dst-p tz)
    (get-decoded-time)
    (format t "It is now ~2,'0d:~2,'0d:~2,'0d of ~a, ~d/~2,'0d/~d (GMT~@d)"
          hour minute second (nth day-of-week *day-names*)
          month date year (- tz)))

Saída:(tempo atual é 12:56)

It is now 10:56:55 of Tuesday, 6/04/2013 (GMT+0)

Perl do ActivePerl (instalado a partir do Cygwin):

$now = localtime;
print $now;

Saída:(tempo atual é 12:52)

Tue Jun  4 12:52:17 2013

CPython, instalado a partir da MSI.

import datetime
str(datetime.datetime.now())

Saída:(tempo atual é 13:03)

2013-06-04 11:03:49.248000

JavaScript, Node.js, instalado a partir do MSI:

Date();

Saída:(o tempo atual é 12:09)

Tue Jun 04 2013 10:09:05 GMT+0000 (IST)

Bash (Cygwin):

$ date

Saída:(tempo atual é 13:10)

04 Jun, 2013 13:10:37

C #:

using System;

namespace TestTime
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime d = DateTime.Now;
            Console.WriteLine("Today: {0}", d);
            Console.ReadLine();
        }
    }
}

Saída:(tempo atual é 13:13)

Today: 04-Jun-13 13:13:37

EDIT2:

Hoje nosso sysadmin me deu uma VM para mover minhas coisas para. Curiosamente, o que aconteceu lá é que desta vez eu peguei o Git através do Cygwin, e agora o Git mostra os tempos corretos. O Emacs, no entanto, ainda mostra a hora errada. O Python, (não o que vem junto com o Cygwin) mostra o tempo correto se lançado a partir do Cygwin e a hora errada se for iniciado a partir do Emacs! SBCL mostra o tempo errado, não importa como ele é lançado.

É possível que isso seja alguma configuração de rede? Talvez algo a ver com a forma como o Windows sincroniza a hora do sistema?

questionAnswers(1)

yourAnswerToTheQuestion