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 上显示错误的时间 的相关文章

  • 在旧版本的 MySQL (<5.5.0) 中模拟 TO_SECONDS()

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置
  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • 如何在 RTMP 流中嵌入 pic_timing SEI 挂钟时间码?

    我需要将我的桌面流式传输到 AWS MediaLive 服务 并且根据要求 我必须在流中包含挂钟时间码 AWS 支持人员善意地通知我 对于 h 264 编码流 我需要提供时间码作为 pic timing SEI 消息 我在 Windows
  • 合并多个 git 存储库

    假设我有一个看起来像这样的设置 phd code phd figures phd thesis 由于历史原因 这些都有自己的 git 存储库 但我想将它们合并为一个 以稍微简化事情 例如 现在我可能会进行两组更改 并且必须执行类似的操作 c
  • 在C中将毫秒转换为秒

    简单的C问题 如何正确 简洁地将毫秒转换为秒 有两个限制 我在这个微小的 C 编译器子集中没有浮点支持 我需要将秒四舍五入到最接近的秒 1 499ms 向下舍入 500 999ms 向上舍入 不需要关心负值 int mseconds 160
  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 如何将更改提交到另一个预先存在的分支

    我刚刚对一个分支进行了更改 如何将更改提交到另一个分支 我正在尝试使用 git checkout the commmit to the changed branch b the other branch 但是 我认为这不是正确的做法 因为在
  • 需要帮助编写循环任务调度程序

    我需要编写一个工具 它将按照用户可配置的时间表运行重复任务 我将用 C 3 5 编写它 它将在 XP Windows 7 或 Windows Server 2008 上运行 完成任务大约需要 20 分钟 用户可能想要设置多种配置 例如每日
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • Elisp 获取函数数量?

    我希望能够做到 function arity intern expt 我用谷歌搜索了这个解决方案https github com emacsmirror parser blob master parser fn el https githu
  • 如何列出未推送的 Git 提交(本地但不在源上)

    如何查看我所做的 尚未推送到远程存储库的任何本地提交 偶尔 git status将打印出我的分支是X提交之前origin master 但不总是 这是我安装的 Git 的错误 还是我遗漏了什么 这给出了 origin master 和 HE
  • 如何在没有本地存储库的情况下在远程运行 git 命令

    我有一个名为 git export 的脚本 它可以帮助我导出远程存储库 它是这样运行的 git export http host com git repo lt t tag or b branch or c commit gt local
  • 多个原始输入窗口接收器

    我有一个仅消息窗口 ATL CWindowImpl 它使用 RIDEV INPUTSINK 标志将自身注册为原始输入 这意味着无论该窗口是否是前台窗口 它都会获取所有输入 当该窗口只有一个实例时 这非常有效 但是 当我创建超过 1 个窗口实
  • 如何阻止“gem”实用程序访问我的主目录?

    当我跑步时 gem install
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • Perl:管理 Windows 上的路径编码

    我正在努力处理包含非英文字符的路径 Activestate Perl Windows XP 如何打开 写入 复制等位于包含希腊语 俄语 法语重音字符的路径中的文件 假设我要将 text txt 文件复制到的目录是 C Documents a
  • 如何防止克隆我的 github 存储库?

    我正在尝试找到一种方法来防止从 github 存储库克隆 例如 我有一个私有存储库 有些人在该存储库中工作 在公司计算机中 团队中的每个人都设置了授权级别 当我在 github 上为某个用户设置授权时 该存储库可在他 她自己的 github
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • git tag --contains 如何工作?

    从几天前开始 我一直在尝试确定在哪个版本 由标签指定 中部署了特定修复 由提交指定 这里的一些帖子发布了这一点git tag contains是收集这些信息的方法 但是选项的文档 https git scm com docs git tag
  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt

随机推荐

  • 为什么 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 中的时间