gpt4 book ai didi

git - Git 如何解析日期字符串?

转载 作者:行者123 更新时间:2023-12-04 04:13:41 24 4
gpt4 key购买 nike

我有一个来自 Joda DateTime.toString 的日期字符串,如下所示:

2020-04-03T12:43:55.019-04:00"

如果我这样做

git commit --date="2020-04-03T12:43:55.019-04:00”

然后 git log查看日期,返回 Sun Apr 19 12:43:55 2020 -0400这在日期部分似乎是错误的。

但如果我将时区从 04:00 稍微更改为 05:00,Git 似乎可以很好地解析日期:

git commit --date="2020-04-03T12:43:55.019-05:00”

当我运行 git log 时会给我正确的日期时间命令:Fri Apr 3 12:43:55 2020 -0500

第一次约会有什么问题?为什么 Git 认为它是从 4 月 19 日而不是 4 月 3 日开始的?

最佳答案

我想你发现了一个错误。

git-commit 声称它理解这些格式,但它试图理解更多。

   The GIT_AUTHOR_DATE, GIT_COMMITTER_DATE environment variables and the --date option
support the following date formats:

Git internal format
It is <unix timestamp> <time zone offset>, where <unix timestamp> is the number
of seconds since the UNIX epoch. <time zone offset> is a positive or negative
offset from UTC. For example CET (which is 1 hour ahead of UTC) is +0100.

RFC 2822
The standard email format as described by RFC 2822, for example Thu, 07 Apr
2005 22:13:13 +0200.

ISO 8601
Time and date specified by the ISO 8601 standard, for example
2005-04-07T22:13:13. The parser accepts a space instead of the T character as
well.

Note
In addition, the date part is accepted in the following formats:
YYYY.MM.DD, MM/DD/YYYY and DD.MM.YYYY.

2020-04-03T12:43:55.019-04:00 是一个完全有效的 ISO 8601 datetime格式为 YYYY-MM-DDThh:mm:ss.sss±hh:mm。它应该工作。例如,这里是 Ruby on Rails。

[1] pry(main)> Time.parse("2020-04-03T12:43:55.21-04:00")
=> 2020-04-03 12:43:55 -0400

Git 似乎混淆了小数秒并将它们用作月日。是的,似乎也特别是关于 -04:00 时区。

  • git commit --date='2020-04-03T12:43:55.021-04:00' -> Tue Apr 21 12:43:55 2020 -0700(带小数秒,0400偏移量,不正确)
  • git commit --date='2020-04-03T12:43:55-04:00' -> Fri Apr 3 12:43:55 2020 -0400(没有小数秒,0400偏移,正确)
  • git commit --date='2020-04-03T12:43:55.021-05:00' -> Fri Apr 3 12:43:55 2020 -0500(小数秒,0500 偏移量, 正确)
  • git commit --date='2020-04-03T12:43:22.023-04:00' -> Thu Apr 23 12:43:22 2020 -0700(派系秒数,不正确)
  • git commit --date='2020-04-03T12:43:22.024-04:00' -> Fri Apr 3 12:43:22 2020 -0400(正确)

我的猜测是 Git 的临时解析将“21-04”读取为日期 4 月 21 日。例如。

  • git commit --date='12:43:22 23-04' -> 2020 年 4 月 23 日星期四 12:43:22 -0700

为什么在 4 月 23 日停止,我不知道。

它可能会在 23 点停止,因为没有 24 小时。

错误可能在 match_multi_number in date.c 中.

关于git - Git 如何解析日期字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com