如何快速将Ubuntu系统中的时间戳转换成易读的日期格式?
- 内容介绍
- 文章标签
- 相关推荐
你是否曾在 Ubuntu 终端里看到一串毫无意义的数字——比如 1633024800,却不知它代表什么?这就是 Unix 时间戳,记录自 1970 年 1 月 1 日起的秒数。话说回来,对许多程序管理员、开发者和运维同学频繁面对这样的数字会让人头疼不已:不知道怎么读、怎么转换、怎么验证…,
再看认识时间戳。痛点先说
痛点一:时间戳看起来像乱码,导致无法直观看出事件发生的具体日期。
痛点二:缺乏统一的转换工具,导致每次都要手动查表或跑脚本。
痛点三:误用命令或格式导致结果错误,甚至影响日志分析和监控报警。
在终端快速转换
Ubuntu 自带的 date 命令可以直接把秒级时间戳转成可读格式。只需打开终端,输入:
date -d @1633024800
# 输出:Wed Sep 30 00:00:00 UTC 2021
说明:
-
-d @表示解析一个时间戳。 -
如果想得到本地时区的结果,只需要去掉
-u参数;若需要 UTC,则加上-u. - 例如:
date -u -d @1633024800
# 输出:Wed Sep 30 00:00:00 UTC 2021
常见问题排查
- "invalid date" 错误:检查时间戳是否为整数;怎么说呢,如果是毫秒级,需要先除以1000。
- "Illegal option -- d" :确认使用的是 GNU coreutils 的 date,而非 BSD 程序。
-
"Date format not recognized" :确保使用的是正确的格式字符串,例如
%Y-%m-%d %H:%M:%S.
使用 Python 脚本批量转换
If your workflow involves parsing log files or integrating timestamp conversion into a larger Python project。you can use following snippet:
import datetime
def ts_to_str:
return datetime.datetime.fromtimestamp.strftime
# 示例
print) # 输出:2021-09-30 08:00:00
print) # 输出:2021/09/30
批量处理示例
with open as f:
for line in f:
ts = int)
print}")
利用 awk 提取日期部分
If you only need date and want a one-liner:
date -d @1633024800 +%F
# 输出:2021-09-30
结合 grep/sed 做一次性批处理
grep -Eo '\b\d{10}\b' biglog.log | \
while read ts;do
date -d @$ts '+%Y-%m-%d %H:%M:%S';老实说,done | sort | uniq> converted_log.txt
小结 &️️️️提高工作效率的小技巧
-
快捷键 / alias : 在 ~/.bashrc 添加 alias 如下让日后输入更省事:
alias ts='date -ud @' alias tslocal='date -d @' alias tsfmt='date -ud @ +%F' // 示例:ts 1633024800 → Fri Sep 30 2021 …tslocal ,tsfmt …
-
自定义格式化模板 : 常用模板可写成函数或 shell script,以避免每次都记住完整命令。话说回来,从例如来看,
cat> ~/bin/tsconv.sh <'EOF' #!/usr/bin/env bash fmt=${1:-'%F %T'} shift for ts in "$@"; do date -ud "@$ts" +"$fmt" done EOF chmod +x ~/bin/tsconv.sh // 用法: ~/bin/tsconv.sh '%Y-%m-%d' 1633024800 1633035600
- 日志统一化 : 对于程序日志、应用日志混杂多种时区。可先统一为 UTC 再做分析,这样能避免因时区差异导致的数据偏移。
- 监控告警 : 在 Promeus 或 Grafana 中配置相应的数据源时把时间戳字段转成标准 ISO8601 格式。可以让图表显示更直观,也方便跨网站共享。
- 持续学习 : 熟练掌握 GNU date 的各种选项,可以让你在面临不同需求时游刃有余。
你是否曾在 Ubuntu 终端里看到一串毫无意义的数字——比如 1633024800,却不知它代表什么?这就是 Unix 时间戳,记录自 1970 年 1 月 1 日起的秒数。话说回来,对许多程序管理员、开发者和运维同学频繁面对这样的数字会让人头疼不已:不知道怎么读、怎么转换、怎么验证…,
再看认识时间戳。痛点先说
痛点一:时间戳看起来像乱码,导致无法直观看出事件发生的具体日期。
痛点二:缺乏统一的转换工具,导致每次都要手动查表或跑脚本。
痛点三:误用命令或格式导致结果错误,甚至影响日志分析和监控报警。
在终端快速转换
Ubuntu 自带的 date 命令可以直接把秒级时间戳转成可读格式。只需打开终端,输入:
date -d @1633024800
# 输出:Wed Sep 30 00:00:00 UTC 2021
说明:
-
-d @表示解析一个时间戳。 -
如果想得到本地时区的结果,只需要去掉
-u参数;若需要 UTC,则加上-u. - 例如:
date -u -d @1633024800
# 输出:Wed Sep 30 00:00:00 UTC 2021
常见问题排查
- "invalid date" 错误:检查时间戳是否为整数;怎么说呢,如果是毫秒级,需要先除以1000。
- "Illegal option -- d" :确认使用的是 GNU coreutils 的 date,而非 BSD 程序。
-
"Date format not recognized" :确保使用的是正确的格式字符串,例如
%Y-%m-%d %H:%M:%S.
使用 Python 脚本批量转换
If your workflow involves parsing log files or integrating timestamp conversion into a larger Python project。you can use following snippet:
import datetime
def ts_to_str:
return datetime.datetime.fromtimestamp.strftime
# 示例
print) # 输出:2021-09-30 08:00:00
print) # 输出:2021/09/30
批量处理示例
with open as f:
for line in f:
ts = int)
print}")
利用 awk 提取日期部分
If you only need date and want a one-liner:
date -d @1633024800 +%F
# 输出:2021-09-30
结合 grep/sed 做一次性批处理
grep -Eo '\b\d{10}\b' biglog.log | \
while read ts;do
date -d @$ts '+%Y-%m-%d %H:%M:%S';老实说,done | sort | uniq> converted_log.txt
小结 &️️️️提高工作效率的小技巧
-
快捷键 / alias : 在 ~/.bashrc 添加 alias 如下让日后输入更省事:
alias ts='date -ud @' alias tslocal='date -d @' alias tsfmt='date -ud @ +%F' // 示例:ts 1633024800 → Fri Sep 30 2021 …tslocal ,tsfmt …
-
自定义格式化模板 : 常用模板可写成函数或 shell script,以避免每次都记住完整命令。话说回来,从例如来看,
cat> ~/bin/tsconv.sh <'EOF' #!/usr/bin/env bash fmt=${1:-'%F %T'} shift for ts in "$@"; do date -ud "@$ts" +"$fmt" done EOF chmod +x ~/bin/tsconv.sh // 用法: ~/bin/tsconv.sh '%Y-%m-%d' 1633024800 1633035600
- 日志统一化 : 对于程序日志、应用日志混杂多种时区。可先统一为 UTC 再做分析,这样能避免因时区差异导致的数据偏移。
- 监控告警 : 在 Promeus 或 Grafana 中配置相应的数据源时把时间戳字段转成标准 ISO8601 格式。可以让图表显示更直观,也方便跨网站共享。
- 持续学习 : 熟练掌握 GNU date 的各种选项,可以让你在面临不同需求时游刃有余。

