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?
更新
遵循这个问题,从而结合使用tz和time_to_tm(),我们可以得到“真实”的本地时间吗?AFAIK,本地时间符号属于userland。例如,DST是在每个时区特别编译的配置文件中定义的。
我很困惑。sys_tz在内核中的含义是什么?
发布于 2012-09-02 16:28:00
内核不知道也不关心时区或DST,它所做的每一件事都是以秒为单位的。时区和DST由用户模式的库处理,这些库检查您的环境变量,并可以扫描时区文件。
这个函数不能被最终用户调用--没有系统调用接口。它只是在内核内部使用。如果您查看交叉引用(汤姆逊),那么当前调用它的惟一位置是FAT文件系统驱动程序。它确实用于调整时区;它是为了支持tzoff挂载选项。
发布于 2012-09-08 06:43:54
Userspace可以调用settimeofday()将本地时间和时区传递到内核。时区存储在sys_tz中(参见kernel/time.c中的do_sys_settimeofday() )。内核主要使用sys_tz通过gettimeofday()等将本地时间返回到用户空间,还有一些地方(如fs/fat )也希望使用时区。
https://stackoverflow.com/questions/12237224
复制相似问题