Emacs 和 Git 在 Windows 上显示错误的时间

2023-11-21

Emacs 与系统时间相差两个小时。我尝试用谷歌搜索这个问题,但没有成功。我需要配置什么来纠正这个问题?我怀疑这是从 GMT 到我住的地方的差异(我在 GMT+2 时区,也就是说,如果我从系统时间 2 中减去,我将得到 Emacs 中的时间)。那么...也许是一些区域设置?

我只是搞乱了 git 存储库,因为:通过提交magit使用 Emacs 时间,并将它们放在其他人所做的提交之前:(

enter image description here

在这里,我添加了一个屏幕截图来显示差异。的输出date是正确的时间,但模型线边缘的时间是错误的。

EDIT0:

看来 Stefan 是对的,Git 中的时间与 Emacs 中的时间没有关联(下面的屏幕截图来自 Cygwin 终端)。

这个问题与 Git 和 Emacs 一样相关 - 不知何故,他们使用了一些在我的 PC 上不同步的系统 API - 这是我需要设置的东西,以使它们在它上保持一致。问题是他们都使用什么设置?

enter image description here

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)))

Output: (实际时间为12点56分)

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

ActivePerl 中的 Perl(从 Cygwin 安装):

$now = localtime;
print $now;

Output: (实际时间为12点52分)

Tue Jun  4 12:52:17 2013

Python,从 MSI 安装。

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

Output: (实际时间为13:03)

2013-06-04 11:03:49.248000

JavaScript、Node.js,从 MSI 安装:

Date();

Output: (实际时间为12点09分)

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

重击(Cygwin):

$ date

Output: (实际时间为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();
        }
    }
}

Output: (实际时间为13点13分)

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

EDIT2:

今天,我们的系统管理员给了我一个虚拟机来将我的东西移动到其中。有趣的是,这次我通过 Cygwin 获取了 Git,现在 Git 显示了正确的时间。然而,Emacs 仍然显示错误的时间。 Python(不是与 Cygwin 捆绑在一起的)如果从 Cygwin 启动则显示正确的时间,如果从 Emacs 启动则显示错误的时间! SBCL无论如何启动都显示错误的时间。

这有可能是某种网络设置吗?也许与 Windows 如何同步系统时间有关?


Windows 程序从您通过控制面板设置的系统获取时区信息。时间本身也可以手动设置,但更常见的是让 Windows 通过以下方式与时间服务器同步Windows 时间服务(基于 NTP;有关用法,请参阅WinXP 支持文章)。 AFAIK Windows 时间服务与时区无关,并且是问题中涉及的唯一与网络相关的事物。

理论上,Cygwin 程序的行为应与任何其他 *NIX 上的行为相同。他们从以下位置获取时区信息/etc/localtime file or TZ环境变量。就我而言(Debian),/etc/localtime是一个副本/usr/share/zoneinfo/Europe/Prague,但它也可能是指向该位置的符号链接。TZ可以包含相对于的路径/usr/share/zoneinfo并优先于/etc/localtime.

实践则是另一回事。根据Cygwin 邮件列表上的一个主题,Microsoft C 运行时 (mscrt*.dll) 具有极其过时的时区处理,并且用于非 Cygwin 程序。这与您得到的结果一致。相关技术信息在2005 年 8 月的一条线索 and 2010 年 5 月的相关文章.

有一个Python 的解决方法已经发布在 SO 上并且对于 C++ 来说完全相同,它比之前链接的线程对 MSCRT 问题有更简短的解释。

也许 Emacs 与这个问题有一些特殊的关系。GNU Emacs 开发者邮件列表上的 2009 年 2 月消息报告 Emacs 22.3 显示正确的时间,而 Emacs 23 则不显示。根据回复的建议,作者发布了向 Cygwin 邮件列表报告——但没有得到回复。2012年12月通过记录该问题及其解决方法可以解决该问题(请参阅/usr/share/doc/Cygwin/emacs.README). 我没有 Cygwin,无法在其 CVS 中找到此文件,因此请使用其中的信息编辑我的答案。

我个人认为在您的中设置(和导出)TZ 环境变量~/.profile将是一个好主意。 Cygwin 显然已经破坏了时区处理,因此覆盖所有相关的内容应该是最安全的事情,因为它只为黑魔法留下了一点空间。或许tzset会起作用,也许不会,你必须将时区设置为恒定值。

Try 在 Cygwin.com 上谷歌搜索“时区”以获得更多资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Emacs 和 Git 在 Windows 上显示错误的时间 的相关文章

随机推荐

  • 为什么 Java 8 对派生类应用注释的方式不同?

    如果我有以下两个课程 Base java public abstract class Base
  • 如何在C#中将相同的控件添加到多面板中?

    我有一个名为 button1 的按钮和两个名为 panelA 和 panelB 的面板 默认情况下 visible 为 false 以及以下代码 WinForms panelA Controls Add button1 panelB Con
  • CallSessionContext、ThreadLocalSessionContext 和 ThreadStaticSessionContext 之间的区别

    From NHibernate 文档 这并没有解释太多 这三个有什么区别 在什么情况下 其中一个上下文比其他上下文更可取 P S ThreadLocalSessionContext文档中不存在 但它确实存在于NHibernate dll 看
  • SwiftUI macos NSWindow 实例

    Using xcode 12 3 and swift 5 3与SwiftUI App构建一个生命周期macOS应用程序 访问和更改应用程序的外观和行为的最佳方式是什么NSWindow Edit 我真正追求的是NSWindow实例 我添加了一
  • 在Python中禁用或锁定鼠标和键盘?

    有没有办法使用 python 禁用或锁定鼠标和键盘 我想冻结鼠标并禁用键盘 我还没有测试过 实际上我已经测试了鼠标部分 它的工作很烦人 但是像这样使用pyhook会做你想做的事 import pythoncom pyHook def uMa
  • Django 项目:名称空间“admin”不是唯一的

    在尝试运行 C Python34 python manage py makemigrations 时 我收到以下错误 遵循来自www testandtrack io Error WARNINGS urls w005 URL namespac
  • 以编程方式更改语言(Android N 7.0 - API 24)

    我使用以下代码在我的应用程序中设置特定语言 语言保存到SharedPreferences在应用程序内 它可以完美地工作到 API 级别 23 使用 Android NSharedPreferences效果也很好 它返回正确的语言代码字符串
  • Android webview读取cookies

    我有以下代码来在网络视图中显示网页 WebView myWebView WebView findViewById R id webView1 myWebView loadUrl http the url com WebSettings we
  • 取消引用变量的闭包有用吗?

    我不确定取消引用变量是否或何时有用 以提高性能 var x a b c d some key f while loop do something with x 似乎比 while loop do somthing with a b c d
  • 在 azure-devops 中的发布管道期间创建标签

    Setup 当运行发布管道时 我这样做 使用构建管道项目A的工件 它使用存储库项目A 这个工件是一个节点包构建 我将注入 重新版本 包版本 使用管道变量VERSION 然后作为最后一步发布到 npm 注册表 Goal除了所有构建 发布任务工
  • 当我退出应用程序时 Android 服务停止

    我有一个带有服务的应用程序 服务由应用程序在创建方法的主活动中启动 当我退出应用程序时 出现问题 服务停止 有时立即重新启动 有时最近重新启动 我在4 1 2版本和2 3 6版本中进行了测试 2 3 6 版本中不再提供服务 我的做法有错吗
  • 使用boto3从公共存储桶下载

    我正在尝试列出 AWS 上公共存储桶中的文件 但我得到的最好结果是列出我自己的存储桶和我自己的文件 我假设 boto3 正在使用我在系统中配置的凭据来列出我的东西 如何强制它从特定存储桶列出 而不是我自己的存储桶 http sentinel
  • Qt QPlainTextEdit背景

    我想改变一个的背景颜色QPlainTextEdit 我该怎么做呢 修改纯文本编辑的调色板 示例程序 include
  • 错误java.lang.IndexOutOfBoundsException:无效索引0,大小在我的程序android中为0

    我开始在android中开发 我尝试修改Snake代码以包括对浏览器的调用以显示网页 当我执行我的应用程序时 它显示brwser中的页面 但是当我回到snake应用程序时 它显示了问题消息表明应用程序意外停止 并且 logCat 显示以下异
  • 我可以使用 pthread_kill 停止(暂停)pthread 执行吗

    如果我向线程发送 SIGTSTP 信号 线程会停止吗 或者换句话说 它的行为会像 SIGTSTP 和 SIGCONT 上的进程一样吗 提前致谢 来自 man 3p pthread kill 请注意 pthread kill 仅导致在给定线程
  • 通过 VS 2015 RC 进行非 Azure 部署

    I m trying out ASP NET 5 and all its new features on VS 2015 Enterprise RC To ensure smooth end to end deployment I then
  • 在 Windows 中创建临时目录?

    在 Windows 中获取临时目录名称的最佳方法是什么 我看到我可以使用GetTempPath and GetTempFileName创建一个临时文件 但是有没有相当于Linux BSD的mkdtemp创建临时目录的函数 不 没有与 mkd
  • 如何在 Microsoft Visual Studio 2012 中制作项目/解决方案的副本?

    正如标题所述 如何在 Microsoft Visual Studio 2012 中制作项目 解决方案的副本 就是这么简单的一个选项 却似乎不可用 好消息是 如果您安装了 Blend for Visual Studio 2012 它随我的 M
  • 将选定的语言选项存储在 cookie/localSession 中

    我希望我的 Next js 应用程序记住用户喜欢哪种语言 因此我想将其存储在客户端的 cookie 中 我有 2 种语言选项 英语和法语 默认情况下 语言设置为英语 无 cookie myapp com 但是一旦用户点击 EN 首选项 UR
  • Emacs 和 Git 在 Windows 上显示错误的时间

    Emacs 与系统时间相差两个小时 我尝试用谷歌搜索这个问题 但没有成功 我需要配置什么来纠正这个问题 我怀疑这是从 GMT 到我住的地方的差异 我在 GMT 2 时区 也就是说 如果我从系统时间 2 中减去 我将得到 Emacs 中的时间