浅谈 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 ( |
| Go | "time" |
| Go | ) |
| Go | int64(time.Now().Unix()) |
| Java | // pure java |
| Java | System.currentTimeMillis() / 1000 |
| Java | // joda java |
| Java | DateTime.now().getMillis() / 1000 |
| Java | // java >= 8 |
| Java | Instant.now().getEpochSecond() |
| C | #include <sys/time.h> |
| C |   |
| C | // ... |
| C | struct timeval tv; |
| C | gettimeofday(&tv, NULL); |
| C | // 秒: tv.tv_sec |
| C | // 毫秒: 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 |
| PHP | // pure php |
| PHP | time(); |
| PHP | <?php |
| PHP | // carbon php |
| PHP | use Carbon\Carbon; |
| PHP | Carbon::now()->timestamp; |
| Python | import time |
| Python | time.time() |
| Python | import arrow |
| Python | 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 时间戳的知识对于开发和系统管理非常重要,能够帮助准确记录和处理时间相关的信息。

相关推荐
7yewh9 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi13 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试13 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha21 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
打鱼又晒网21 分钟前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp
良许Linux35 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维1 小时前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
Hacker_Oldv1 小时前
WPS 认证机制
运维·服务器·wps
bitcsljl1 小时前
Linux 命令行快捷键
linux·运维·服务器