将 Linux/Unix 时间转换为人类可读的日期格式

2025年03月17日 | 阅读 9 分钟

Unix 时间周期,也简称为“纪元周期”、“POSIX 周期”或“Unix 周期”,是一种时间跟踪系统,它表示自 Unix 纪元开始以来的秒数。Unix 纪元开始于 1970 年 2 月 1 日,00:00。00:00 UTC 被定义。

Unix 时间始于 1970 年 1 月 1 日 UTC 午夜。它计算自那时以来的总秒数。例如,Unix 时间戳 1716620142 表示自 1970 年 1 月 1 日以来经过的秒数。Unix 纪元周期已被广泛用于各种目的,包括文件系统、数据库和网络协议,因为它简单且提供了一种处理日期和季节的一致方法。

Converting Linux/Unix Time to Human-Readable Date Format

Unix 纪元时间不考虑闰秒。它假定每天正好是 86400 秒,从而简化了计算,但随着时间的推移会引入一些误差。它在系统中提供了一致的时间测量。使用单个整数值来表示时间可以简化时间计算和比较。可以使用 Linux Bash 命令和编程语言在 Unix 时间和人类可读日期之间进行转换。例如,可以在类 Unix 系统上使用 date 命令,并且大多数编程语言都提供处理此类转换的库。

在 Linux/Unix 中使用命令

在 Linux 中,您可以使用 date 命令将 Linux 时间转换为人类可读的格式。

打开终端并运行以下命令来生成 Unix 时间戳

命令

输出

Converting Linux/Unix Time to Human-Readable Date Format

现在,要将其转换为人类可读的格式,请运行以下命令

命令

在此处输入早期命令生成的戳。例如:

输出

Converting Linux/Unix Time to Human-Readable Date Format

在 Mac OS 中

在 macOS 中,date 命令的语法略有不同。

使用以下命令生成时间戳

命令

输出

Converting Linux/Unix Time to Human-Readable Date Format

要转换为人类可读的格式,请执行以下命令

命令

将 <timestamp> 替换为生成的时间戳。

输出

Converting Linux/Unix Time to Human-Readable Date Format

将秒转换为日期时间格式

  • 首先,将总秒数分解为更大的单位,例如天、小时、分钟和剩余的秒数。
  • 然后,将这些单位映射到公历以获取年、月、日、时、分和秒。
  • 计算总天数: 将总秒数除以一天中的秒数 (86400) 转换为天数。
  • 确定年份、月份和日期: 从 1970 年开始,添加年份,直到总天数超过每年的天数。在过程中减去每年的天数。一旦确定了年份,就使用剩余的天数来查找月份和日期。减去每个月的天数,直到剩余的天数适合当前月份。
  • 计算一天中的时间: 将剩余的秒数转换为小时、分钟和秒。

示例

让我们通过一个例子来理解。这里,我们以 1716547702 秒为例。

总秒数 = 1716547702

一天的总秒数:86400

转换为天数

总天数 = 1716547702 / 86400 = 19867

剩余秒数 1716547702 % 86400 = 41102

小时、分钟和秒

1 小时 = 3600 秒

1 分钟 = 60 秒

小时 41200 / 3600 = 11

剩余秒数 41102 % 3600 = 4102

分钟 = 4102 / 60 = 68

= 4102 % 60 = 2

确定年份

从 1970 年开始,减去每年的天数,直到总天数适合当前年份。

闰年和非闰年的计算

  • 1970 年:非闰年(365 天)
  • 1971 年:非闰年(365 天)
  • 1972 年:闰年(366 天)

此过程将继续进行,直到确定年份为止。

月份和日期

识别每个月的天数并减去每个月的天数。

月份和日期的计算

一月:31 天

二月:28 天

三月:31 天

此过程将继续进行,直到确定月份为止。

计算一天中的时间

将剩余的秒数转换为小时、分钟和秒。

小时 = 11

分钟 = 68

秒:2

使用 Javascript 实现上述方法

我们在上面看到的 JavaScript 代码中使用了这种方法。让我们看看程序。

代码

输出

 
Human-Readable DateTime: 2024-05-24 10:48:22

说明

'convertUnixToReadable' 函数在上面的 JS 代码片段中将 Unix 时间戳转换为人类可读的日期和时间格式。接下来,代码开始使用 'Date' 对象将 Unix 时间戳从秒转换为毫秒。然后,程序从 'Date' 对象中提取年、月、日、时、分和秒,并在需要时插入前导零,以确保每个元素都是两位数,然后将这些部分格式化为“YYYY-MM-DD HH:MM:SS”格式的字符串并返回。

使用 Python

这是我们在其中实现纪元方法的完整 Python 代码。

代码

输出

 
Human-Readable DateTime Format: 2024-05-24 10:48:22

说明

在上面的 Python 代码中,首先计算给定 Unix 时间戳的所有天、小时、分钟和秒,然后从 1970 年开始重复计算以考虑超额。减去年份的天数,直到剩余的天数小于当前年份的天数。从剩余天数中减去每个月的天数,通过调整超额年份的帐户来计算月份和日期。最后,将计算出的年、月、日、时、分和秒格式化为易于阅读的字符串并打印为结果。

使用 Java

这是我们在其中实现纪元方法的完整 Java 代码。

代码

输出

 
Human Readable DateTime: 2024-05-24 16:18:22

说明

提供的 Java 代码通过使用系统默认时间戳将 'Instant.ofEpochSecond' 定义为 'LocalDateTime' 对象来将 Unix 时间戳转换为人类可读的日期时间格式。然后,它使用 'DateTimeFormatter' 将此 'LocalDateTime' 对象转换为 yyyy-MM-dd HH:mm:ss 格式的人类可读字符串。最后,它打印一个日期时间字符串数组。

使用 C++

这是我们在其中实现纪元方法的完整 C++ 代码。

代码

输出

 
Human Readable Date-Time: 2024-05-24 10:48:22

说明

在上面的代码中,首先定义时间戳并将其转换为 'std::chrono::system_clock::time_point'。然后,将此时间点转换为 'std::time_t' 以便与 'std::gmtime' 一起使用。它们被转换并使用 'std::put_time' 格式化为可读字符串,以指定 UTC 时间的日期和时间。

使用 C

这是我们在其中实现纪元方法的完整 C 代码。

代码

输出

 
Human Readable Date-Time: 2024-05-24 10:48:22

说明

在上面的 C 代码中,定义时间戳并使用 'gmtime' 函数修改一个静态的 'struct tm' 来表示 UTC 时间,然后使用 'strftime' 获取 "YYYY-MM-DD HH:MM:SS" 格式的字符串。

使用 C#

这是我们在其中实现纪元方法的完整 C# 代码。

代码

输出

 
Human Readable Date-Time: 2024-05-24 10:48:22

说明

在给定的 C# 代码中,定义一个时间戳并使用 'FromUnixTimeSeconds' 方法将其转换为 'DateTimeOffset',然后将此 'DateTimeOffset' 设置为具有 "yyyy-MM-dd HH:mm:ss" 格式的字符串。此外,代码还手动计算了 Unix 时间戳中的所有天、小时、分钟和秒,包括除以天和小时后剩余的小时和分钟。最后,它使用一个日期时间字符串列表,其中包含时间戳的详细分解,包括各个部分。

使用 PHP

这是我们在其中实现纪元方法的完整 C# 代码。

代码

输出

 
Human Readable Date-Time: 2024-05-24 10:48:22

说明

在上面的 PHP 代码中,我们使用解释器将 Unix 时间戳转换为人类可读的日期时间格式。然后,它使用 'DateTime' 构造函数将其转换为 'DateTime' 对象,该对象使用 Unix 时间戳设置为 "@" 并覆盖默认值,然后使用 "Y-m-d H:i:s" 格式化此 'DateTime' 对象为字符串。

结论

将 Linux/Unix 时间转换为人类可读的日期格式对于定义自 1970 年 1 月 1 日以来的秒数时间戳至关重要。此转换对于分析日志、查看文件类型和创建依赖于时间的、数据驱动的应用程序也是必需的。这确保了时间信息的可用性和有意义性,并促进了有效的调试、数据分析和通信。通过将 Unix 时间转换为标准的日期和时间格式,我们使数据对用户和程序更具意义和可操作性。