浅谈 Unix Timestamp 时间戳

Linux 时间戳通常指的是 Unix 时间戳,即自 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。这个时间戳在许多 Unix 系统和类 Unix 系统(包括 Linux)中广泛使用。我们日常工作学习中也是很常用的。

但是很多刚学习的小伙伴对这一串数字不知道如何理解,今天我们就来简单聊聊 Unix 时间戳,相信看完这篇简短的文章,你就可以马上知道这个时间戳的含义和用处啦。

一、Unix 时间戳表示方法

Unix 时间戳是一个整数,表示自 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。可以是正数(1970 年之后)或负数(1970 年之前),所以他是一个累计数。

二、时间戳表示方式

通常,Unix 时间戳可以以整数形式表示,也可以转换为人类可读的日期时间格式。例如,Unix 时间戳为 1612000000 表示 2021 年 1 月 30 日 08:00:00 UTC。

三、获取时间戳

Linux 系统提供了多种方式来获取当前时间戳:
`date` 命令:可以通过 `date +%s` 获取当前的 Unix 时间戳。
编程语言的时间函数:如 Python 的 `time.time()`、C 的 `time()` 函数等可以获取当前 Unix 时间戳。

具体如下图:

Swift NSDate().timeIntervalSince1970
Go import (
  "time"
)
int64(time.Now().Unix())
Java // pure java
System.currentTimeMillis() / 1000
// joda java
DateTime.now().getMillis() / 1000
// java >= 8
Instant.now().getEpochSecond()
C #include <sys/time.h>
 
// ...
struct timeval tv;
gettimeofday(&tv, NULL);
// 秒: tv.tv_sec
// 毫秒: tv.tv_sec * 1000LL + tv.tv_usec / 1000
JavaScript Math.round(new Date() / 1000)
Objective-C [[NSDate date] timeIntervalSince1970]
MySQL SELECT unix_timestamp(now())
SQLite SELECT strftime('%s', 'now')
Erlang calendar:datetime_to_gregorian_seconds(calendar:universal_time())-719528*24*3600.
PHP <?php
// pure php
time();
<?php
// carbon php
use Carbon\Carbon;
Carbon::now()->timestamp;
Python import time
time.time()
import arrow
arrow.utcnow().timestamp
Ruby Time.now.to_i
Shell date +%s
Groovy (new Date().time / 1000).longValue()
Lua os.time()
.NET/C# DateTimeOffset.UtcNow.ToUnixTimeSeconds();
Dart (new DateTime.now().millisecondsSinceEpoch / 1000).truncate()

四、时间戳转换

在日常工作学习中,我们需要将时间戳从一种时间表示形式(如日期对象)到另一种形式(如时间戳)的转换。

下面介绍一下一些常用编程语言的转换方法:

JavaScript // 获取当前时间戳(毫秒级)
var timestamp = Date.now();

// 将时间戳转换为日期对象
var dateObject = new Date(timestamp);

// 将日期对象转换为时间戳
var newTimestamp = dateObject.getTime();
Python from datetime import datetime

# 获取当前时间戳(秒级)
timestamp = datetime.timestamp(datetime.now())

# 将时间戳转换为日期对象
date_object = datetime.fromtimestamp(timestamp)

# 将日期对象转换为时间戳
new_timestamp = datetime.timestamp(date_object)
Java import java.util.Date;

// 获取当前时间戳(毫秒级)
long timestamp = System.currentTimeMillis();

// 将时间戳转换为日期对象
Date dateObject = new Date(timestamp);

// 将日期对象转换为时间戳
long newTimestamp = dateObject.getTime();
C# // 获取当前时间戳(秒级)
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

// 将时间戳转换为日期对象
DateTimeOffset dateObject = DateTimeOffset.FromUnixTimeSeconds(timestamp);

// 将日期对象转换为时间戳
long newTimestamp = dateObject.ToUnixTimeSeconds();
PHP // 获取当前时间戳(秒级)
$timestamp = time();

// 将时间戳转换为日期对象
$dateObject = date("Y-m-d H:i:s", $timestamp);

// 将日期对象转换为时间戳
$newTimestamp = strtotime($dateObject);
SQL // UNIX时间戳转换为日期用函数: FROM_UNIXTIME()
select FROM_UNIXTIME(1156219870);

// 日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP()
select UNIX_TIMESTAMP('2006-11-04 12:23:00');
SHELL // 获取当前时间戳
currentStamp=`date +%s`

// 将标准时间转换成时间戳
standard="2016-08-03 14:13:23"
stamp=`date -d "$standardTime" +%s`

// 将时间戳转换成标准时间
stamp=1287331200
standard=`date -d @"$stamp" +"%Y-%m-%d %H:%M:%S"`

五、重要用途

Unix 时间戳在计算机系统中有许多重要用途,包括:

  • 记录文件的创建时间、修改时间等元数据。
  • 在系统日志中记录事件的发生时间。
  • 在网络通信中用于时间同步。
  • 在编程中用于计算时间间隔、定时任务等。

六、时间戳的问题和注意事项

  • 时间戳的精度通常是秒级的,如果需要更精确的时间,可能需要使用毫秒级别的时间戳。
  • 时间戳是相对于 UTC 时间的,如果需要转换为本地时间,需要考虑时区的影响。
  • 在处理时间戳时,要注意处理溢出、格式转换和时区转换等问题。

掌握 Linux 时间戳的知识对于开发和系统管理非常重要,能够帮助准确记录和处理时间相关的信息。

相关推荐

  1. Unix Timestamp 时间

    2024-02-02 16:02:01       46 阅读
  2. 时间序列预测中的时间

    2024-02-02 16:02:01       97 阅读
  3. 架构方法之时间片轮询

    2024-02-02 16:02:01       32 阅读
  4. 引入时间概念的分布式系统

    2024-02-02 16:02:01       25 阅读
  5. [C语言]时间

    2024-02-02 16:02:01       64 阅读
  6. 如何获取时间

    2024-02-02 16:02:01       60 阅读
  7. c#,获取时间

    2024-02-02 16:02:01       62 阅读
  8. 如何获取时间

    2024-02-02 16:02:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 16:02:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 16:02:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 16:02:01       82 阅读
  4. Python语言-面向对象

    2024-02-02 16:02:01       91 阅读

热门阅读

  1. ORA-65096: 公用用户名或角色名无效

    2024-02-02 16:02:01       46 阅读
  2. Redis为什么快?

    2024-02-02 16:02:01       54 阅读
  3. MySQL中的约束(七)

    2024-02-02 16:02:01       47 阅读
  4. mysql innodb 之 buffer pool

    2024-02-02 16:02:01       44 阅读
  5. HttpSession

    2024-02-02 16:02:01       55 阅读
  6. 零信任安全架构发展趋势

    2024-02-02 16:02:01       50 阅读
  7. go语言-context的基本使用

    2024-02-02 16:02:01       52 阅读
  8. 民安智库开展空气污染治理满意度调研

    2024-02-02 16:02:01       54 阅读
  9. 如何提高Bito生成函数代码的准确度

    2024-02-02 16:02:01       49 阅读
  10. L1-018 大笨钟分数 10

    2024-02-02 16:02:01       60 阅读
  11. SpringBoot集成Redisson实现限流(二)

    2024-02-02 16:02:01       59 阅读
  12. 读取超大文件的大小(20G),并切分的处理

    2024-02-02 16:02:01       48 阅读