Emacs はシステム時間から 2 時間ずれています。問題をグーグルで検索しようとしましたが、うまくいきませんでした。これを修正するには、何を構成する必要がありますか? これは GMT と私の住んでいる場所との違いだと思います (私は GMT+2 ゾーンにいます。つまり、システム時刻から 2 を引くと、Emacs で時刻が得られます)。それで...多分それはいくつかのロケール設定ですか?
そのため、gitリポジトリを台無しにしてしまいました.Emacsのmagit
使用時間を使用して作成されたコミットを、他の誰かが作成したコミットの前に配置しました:(
ここに、違いを示すスクリーンショットを追加しました。からの出力date
は正しい時刻ですが、モードライン フリンジの時刻は間違っています。
EDIT0:
ステファンは正しいようで、Git の時刻は Emacs の時刻とは関係がありません (下のスクリーンショットは Cygwin 端末のものです)。
この質問は、Emacs と同様に Git にも関連しています。どういうわけか、彼らは私の PC で同期しないシステム API を使用しています。問題は、両方が使用する設定は何ですか?
EDIT1:
Emacsが時間を取得するために使用するコードは次のとおりです。
/* 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;
}
そして、それはtz
間違っているようです。何であるかはわかりませ_ftime
んが、Emacs のソースでは定義されていないようです。これはどこかから来ているに違いありません...
いくつかのより多くの研究:
MSI からインストールされた SBCL では、次のようになります。
(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)))
出力: (実際の時間は 12:56)
It is now 10:56:55 of Tuesday, 6/04/2013 (GMT+0)
ActivePerl からの Perl (Cygwin からインストール):
$now = localtime;
print $now;
出力: (実際の時刻は 12:52)
Tue Jun 4 12:52:17 2013
MSI からインストールされた CPython。
import datetime
str(datetime.datetime.now())
出力: (実際の時間は 13:03)
2013-06-04 11:03:49.248000
MSI からインストールされた JavaScript、Node.js:
Date();
出力: (実際の時刻は 12:09)
Tue Jun 04 2013 10:09:05 GMT+0000 (IST)
バッシュ (Cygwin):
$ date
出力: (実際の時刻は 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();
}
}
}
出力: (実際の時間は 13:13)
Today: 04-Jun-13 13:13:37
EDIT2:
今日、私たちのシステム管理者は、私のものを移動するための VM をくれました。興味深いことに、今回は Cygwin を介して Git を取得したところ、Git が正しい時刻を表示するようになりました。ただし、Emacs は依然として間違った時刻を表示します。Python (Cygwin にバンドルされているものではない) は、Cygwin から起動すると正しい時刻を示し、Emacs から起動すると間違った時刻を表示します! SBCL は、どのように起動しても間違った時刻を示します。
これはネットワーク設定である可能性はありますか?おそらく、Windows がシステム時刻を同期する方法と何か関係があるのでしょうか?