在Linux系统中,获取UTC(协调世界时)时间是常见的操作,尤其是在日志记录、跨时区应用开发或系统同步等场景中,UTC作为全球统一的时间标准,避免了因时区差异导致的时间混乱,本文将详细介绍在Linux环境下获取UTC时间的多种方法,涵盖命令行工具、编程接口及系统配置等不同维度,帮助读者根据实际需求选择合适的方案。

使用命令行工具获取UTC时间
命令行是Linux系统中最直接的操作方式,通过内置工具可以快速获取UTC时间,以下是几种常用的命令及其用法。
date命令:基础时间查询
date是Linux中最基础的时间工具,默认显示本地时间,但通过参数可切换为UTC时间。
- 显示当前UTC时间:
date -u # 或 date --utc
输出示例:
Wed Oct 25 14:30:45 UTC 2023,其中UTC明确标识了时区。 - 获取UTC时间戳:
时间戳是自1970年1月1日00:00:00 UTC以来的秒数,可通过以下命令获取:date -u +%s
若需精确到纳秒,可使用:
date -u +%s%N
timedatectl命令:系统时间管理(适用于systemd系统)
现代Linux发行版多采用systemd管理服务,timedatectl是专门用于查看和设置系统时间的工具。
- 查看当前时间状态:
timedatectl status
输出中会明确显示“Local time”和“Universal time”(即UTC时间),
Universal time: Wed 2023-10-25 14:30:45 UTC
- 显示UTC时间并格式化:
结合printf可自定义输出格式,timedatectl show --property=UniversalTime --value
hwclock命令:硬件时间与UTC时间交互
hwclock用于查看或修改硬件时间(CMOS时间),硬件时间默认可设置为UTC或本地时间。
- 查看硬件时间(UTC):
hwclock --utc # 或 hwclock -u
若硬件时间设置为本地时间,则使用
hwclock --localtime。 - 同步系统时间与硬件时间:
将系统UTC时间写入硬件时间:hwclock --utc --systohc
通过编程接口获取UTC时间
在脚本开发或应用程序中,常需通过编程语言获取UTC时间,以下是几种主流语言的实现方式。
Shell脚本
- 使用
date命令:
在脚本中调用date -u并赋值给变量:utc_time=$(date -u +"%Y-%m-%d %H:%M:%S") echo "Current UTC time: $utc_time"
- 获取时间戳:
utc_timestamp=$(date -u +%s) echo "UTC timestamp: $utc_timestamp"
Python
Python的datetime模块提供了灵活的时间处理功能。
- 获取当前UTC时间:
from datetime import datetime, timezone utc_now = datetime.now(timezone.utc) print("Current UTC time:", utc_now.strftime("%Y-%m-%d %H:%M:%S")) - 获取UTC时间戳:
import time utc_timestamp = time.time() print("UTC timestamp:", utc_timestamp)
C/C++
- 使用
time.h库:#include <time.h> #include <stdio.h> int main() { time_t utc_time; time(&utc_time); printf("UTC timestamp: %ld\n", utc_time); return 0; } - 获取格式化UTC时间:
需结合gmtime函数将时间戳转换为UTC时间结构体:#include <time.h> #include <stdio.h> int main() { time_t utc_time; time(&utc_time); struct tm *utc_tm = gmtime(&utc_time); printf("UTC time: %04d-%02d-%02d %02d:%02d:%02d\n", utc_tm->tm_year + 1900, utc_tm->tm_mon + 1, utc_tm->tm_mday, utc_tm->tm_hour, utc_tm->tm_min, utc_tm->tm_sec); return 0; }
Java
Java 8及以上版本引入了java.time包,推荐使用ZonedDateTime或Instant处理UTC时间。
- 获取当前UTC时间:
import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class UtcTime { public static void main(String[] args) { ZonedDateTime utcNow = ZonedDateTime.now(java.time.ZoneOffset.UTC); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("Current UTC time: " + utcNow.format(formatter)); } } - 获取UTC时间戳:
import java.time.Instant; public class UtcTimestamp { public static void main(String[] args) { long utcTimestamp = Instant.now().getEpochSecond(); System.out.println("UTC timestamp: " + utcTimestamp); } }
系统配置与UTC时间管理
设置系统时区为UTC
若需让系统默认使用UTC时间,可通过修改时区配置实现:

- 手动设置时区文件:
sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
- 使用
timedatectl:sudo timedatectl set-timezone UTC
验证NTP服务同步
为确保UTC时间准确,系统通常通过NTP(网络时间协议)同步时间,检查NTP服务状态:
sudo systemctl status systemd-timesyncd # Ubuntu/Debian # 或 sudo systemctl status ntpd # CentOS/RHEL
若未运行,可启动服务:
sudo systemctl enable --now systemd-timesyncd
注意事项
- 硬件时间与系统时间的一致性:
硬件时间默认建议设置为UTC,避免因时区切换导致时间混乱,可通过hwclock --localtime --show检查当前硬件时间设置。 - 编程中的时区处理:
在开发中,优先使用UTC时间存储和传输,仅在用户界面显示时转换为本地时间,减少时区相关的逻辑错误。 - 闰秒与时间精度:
UTC偶尔会引入闰秒,大多数应用场景无需处理,但高精度时间同步场景需关注相关协议(如PTP)。
通过以上方法,用户可根据需求灵活选择命令行工具、编程接口或系统配置来获取和管理UTC时间,UTC时间的标准化应用不仅提升了跨系统协作的效率,也为时间敏感型应用提供了可靠的时间基准。

















