在 unix 中获取本地时间的最快方法

Posted

技术标签:

【中文标题】在 unix 中获取本地时间的最快方法【英文标题】:Fastest way to get local time in unix 【发布时间】:2013-09-15 16:23:24 【问题描述】:

我正在调查 unix 系统上的日志记录性能。事情是我发现最昂贵的操作是获取日期。

目前我有这样的时间 -

timeb currTime;
struct tm localTime;
ftime( &currTime )
localtime_r(&currTime.time, &localTime);

我改成

struct timeval tv;
gettimeofday(&tv, NULL); 
time_t curtime = tv.tv_sec;
struct tm localTime = *(localtime(&curtime));

并没有看到任何性能改进。所以我想知道这可能不是在 unix 系统上获取本地时间的最快方法吗?

请分享您对此的想法。

提前致谢。

【问题讨论】:

您的性能要求是什么? 尽其所能:) 我也应该能够格式化检索到的日期,如 YYYY.MM.DD HH.MM.SS.mSmS 不要在热线程中格式化。只需存储时间戳,然后离线格式化日志。 不要使用当地时间。所有内部时间都使用 UTC,并且仅转换为本地时间以向用户展示。 【参考方案1】:

gettimeofday 非常快地为您提供 UTC 时间。转换为当地时间并不是那么快。

推迟将其转换为本地时间,直到您脱离性能关键路径。

您还可以每天缓存一次 UTC 到本地时间的转换因子,以加快转换到本地时间的速度,虽然这并不完美,但它可能足以用于记录目的。

【讨论】:

以上是关于在 unix 中获取本地时间的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unix 套接字编程中获取本地 IP 地址和端口?

在本地安装和设置 TYPO3 的最快方法是啥?

在本地复制大文件的最快方法

php 根据Unix时间戳正确获取WordPress中的本地日期/时间。

在两个本地 Web Ubuntu 服务器之间传输文件的最快方法?

Unix 格式的 GMT/UTC(非本地)时间