当前位置: 首页 > 面试题库 >

如何找到当前系统时区?

彭俊智
2023-03-14
问题内容

在Linux上,我需要找到当前配置的时区作为Olson位置。我希望我的(C或C ++)代码可移植到尽可能多的Linux系统。

例如。我住在伦敦,所以我目前在奥尔森的住所是“欧洲/伦敦”。我对诸如“ BST”,“ EST”之类的时区ID 感兴趣。

Debian和Ubuntu都有一个/etc/timezone包含此信息的文件,但是我认为我不能一直依赖那个文件,对吗?Gnome有一个函数oobs_time_config_get_timezone()也可以返回正确的字符串,但是我希望我的代码在没有Gnome的系统上工作。

那么,在Linux上将当前配置的时区作为Olson位置的最佳一般方法是什么?


问题答案:

这是很难得到一个可靠的答案。依靠这样的事情/etc/timezone可能是最好的选择。

(如其他答案中所建议的,变量tzname和的tm_zone成员struct tm通常包含GMT/
BST等缩写,而不是问题中要求的Olson时间字符串)。

  • 在基于Debian的系统(包括Ubuntu)上,/etc/timezone是一个包含正确答案的文件。
  • 在某些基于Redhat的系统(至少包括某些版本的CentOS,RHEL,Fedora)上,您可以使用on上的readlink()获得所需的信息/etc/localtime,它是(例如)的符号链接/usr/share/zoneinfo/Europe/London
  • OpenBSD似乎使用与RedHat相同的方案。

但是,上述方法存在一些问题。该/usr/share/zoneinfo目录还包含诸如GMT和的文件GB,因此用户可能会将符号链接配置为指向该目录。

同样,没有什么可以阻止用户将正确的时区文件复制到那里,而无需创建符号链接。

解决这个问题的一种方法(似乎可以在Debian,RedHat和OpenBSD上使用)是将/ etc / localtime文件的内容与/ usr /
share / zoneinfo下的文件进行比较,并查看哪些匹配:

eta:~% md5sum /etc/localtime
410c65079e6d14f4eedf50c19bd073f8  /etc/localtime
eta:~% find /usr/share/zoneinfo -type f | xargs md5sum | grep 410c65079e6d14f4eedf50c19bd073f8
410c65079e6d14f4eedf50c19bd073f8  /usr/share/zoneinfo/Europe/London
410c65079e6d14f4eedf50c19bd073f8  /usr/share/zoneinfo/Europe/Belfast
410c65079e6d14f4eedf50c19bd073f8  /usr/share/zoneinfo/Europe/Guernsey
410c65079e6d14f4eedf50c19bd073f8  /usr/share/zoneinfo/Europe/Jersey
410c65079e6d14f4eedf50c19bd073f8  /usr/share/zoneinfo/Europe/Isle_of_Man
...
...

当然, 缺点 是它会告诉您所有与当前时区相同的时区。(这意味着完全相同-不仅是“当前同时”,而且“只要系统知道,总是在同一天更改其时钟”)。

你最好的选择可能是上述方法相结合:用/etc/timezone如果存在;
否则尝试解析/etc/localtime为符号链接;如果失败,则搜索匹配的时区定义文件;如果失败了-放弃并回家;-)

(而且我不知道以上任何一项是否适用于AIX …)



 类似资料:
  • 我是一个新的网络应用程序,使一个在线考试网站,并有一个脚本,目前是采取静态日期和时间。我想要它到系统当前日期和时间加上(加上当前时间与)一个值从jsp变量(即考试的时间间隔)当前我的javascript如下:- Add我有一个jsp变量“t”要添加到current time,以使目标时间=current time+“t”。 注意-这是为倒计时计时器在我的网页。 谢谢你。

  • 本文向大家介绍cmd下获取当前系统时间的bat,包括了cmd下获取当前系统时间的bat的使用技巧和注意事项,需要的朋友参考一下 如何获取日期呢? 格式: %date% 注:cmd中测试需要用echo %date%,bat中直接使用即可 结果: 2020/03/13 周五 如何获取时间呢? 格式: %time% 注:cmd中测试需要用echo %time%,bat中直接使用即可 结果: 20:50:

  • 问题内容: 我正在编写几个节点外壳脚本,供在平台上开发时使用。我们有Mac和Windows开发人员。是否可以在Node中检查变量以便在一个实例中运行.sh文件,在另一个实例中运行.bat? 问题答案: 使用的变量是 在Mac上,变量返回。在Windows上,它返回(甚至在64位上)。 当前可能的值为: 我只是将其设置在我的jakeFile的顶部:

  • 问题内容: 我希望Selenium通过箭头键浏览菜单-首先单击顶部菜单项,然后按“ DOWN”,“ DOWN”,… 问题是您必须始终提供特定的元素才能将“ DOWN”发送到。 有什么方法可以获取当前元素? 我试过了: 但它表示该表达式无法识别或未返回正确的对象。 我希望我错过了一些愚蠢的把戏。 问题答案: 没有比访问更直接的方法了

  • 问题内容: 我希望Selenium通过箭头键浏览菜单-首先单击顶部菜单项,然后按“ DOWN”,“ DOWN”,… 问题是您必须始终提供特定的元素才能将“ DOWN”发送到。 有什么方法可以获取当前元素? 我试过了: 但它表示该表达式无法识别或未返回正确的对象。 我希望我缺少一些愚蠢的把戏。 问题答案: 不知道比访问更直接的方法 如何测试Selenium RC中关注的元素?

  • 问题内容: 我想找出当前时间之后10分钟的日期时间。假设我们有 我想找到这个,十分钟后。我怎样才能做到这一点? 问题答案: 。基本上,您只需要添加10分钟的时间增量即可获得所需的时间。