0

Linux 内核提供time_to_tm()(参见此处):

/**
 * time_to_tm - converts the calendar time to local broken-down time
 *
 * @totalsecs   the number of seconds elapsed since 00:00:00 on January 1, 1970,
 *              Coordinated Universal Time (UTC).
 * @offset      offset seconds adding to totalsecs.
 * @result      pointer to struct tm variable to receive broken-down time
 */
void time_to_tm(time_t totalsecs, int offset, struct tm *result)

据介绍,tm将是局部故障时间。因此,我理解tm将尊重我的当地时区和 DST。如果这是正确的,我在代码中看不到它。

也许offset应该使用参数来“提供”本地时区和 DST?

更新

按照这个问题,因此使用sys_tz结合time_to_tm()我们可以获得“真实”的本地时间?AFAIK,本地时间表示法属于用户空间。例如,DST 是在每个时区专门编译的配置文件中定义的。

我很困惑。sys_tz内核中的比是什么意思?

4

2 回答 2

3

内核不知道也不关心时区或 DST,它所做的一切都以自纪元以​​来的秒数为单位。时区和 DST 由库在用户模式下处理,它们检查您的环境变量并可以扫描时区文件。

这个函数不能被最终用户调用——它没有系统调用接口。它只是在内核内部使用。如果您查看交叉引用 (http://lxr.free-electrons.com/ident?v=2.6.33;i=time_to_tm),当前调用它的唯一位置是 FAT 文件系统驱动程序。它确实用于调整时区;这样做是为了支持tzoff挂载选项。

于 2012-09-02T16:28:00.023 回答
1

用户空间可以调用settimeofday()将本地时间和时区传递给内核。时区存储在sys_tz(参见do_sys_settimeofday()kernel/time.c)。内核主要用于sys_tz通过等方式将本地时间返回给用户空间gettimeofday(),还有一些地方fs/fat也想使用时区。

于 2012-09-08T06:43:54.287 回答