如何获得相应的时区位置

时间:2014-09-28 18:11:55

标签: c linux

我有一个要求,我需要根据特定文件中指定的时区更改系统的时区,如果文件中指定的时区是“PDT”,我在/中找不到“PDT” usr / share / zoneinfo而不是它被命名为“PST8PDT”。有没有我可以grep并获取此信息的文件。 注意:文件中指定的时区可以是任何内容。

我需要将TZ变量设置为文件中指定的时区,该时区需要在/ usr / share / zoneinfo目录下。

2 个答案:

答案 0 :(得分:1)

3个字母的时区名称本身不明确。示例:IST是印度/爱尔兰/以色列标准时间。您可以下载没有“标准”映射,因为一般情况下不能存在这种映射。

您需要创建一个从3个字母的时区到zoneinfo中的标准时区名称的映射表。

为此,您必须检查输入文件,以确定输入数据中出现的完整一组3个字母的时区缩写。无论输入的任何时区缩写是否含糊不清,都必须这样做。

然后,如果其中任何一个含糊不清,那么你必须为每个含糊不清的缩写决定它所指的zonenifo时区。因此,例如,在您的表中,IST的行将指向Asia/Kolkata的zoneinfo名称。

这里没有捷径。您必须创建并维护映射,并且必须解决歧义。

答案 1 :(得分:0)

我认为这不是一个正确的答案,但仍然可以尝试使用zdump工具(glibc的一部分)来打印给定日期时区。即使有多个匹配项,例如上面评论中的IST,您也可以使用以下代码找到它们:

$ find /usr/share/zoneinfo -type f | while read zf ; do zdump $zf ; done | grep ' IST$'
/usr/share/zoneinfo/posix/Europe/Dublin  Sun Sep 28 19:42:38 2014 IST
/usr/share/zoneinfo/posix/Eire  Sun Sep 28 19:42:38 2014 IST
/usr/share/zoneinfo/posix/Asia/Kolkata  Mon Sep 29 00:12:38 2014 IST
/usr/share/zoneinfo/posix/Asia/Calcutta  Mon Sep 29 00:12:38 2014 IST
/usr/share/zoneinfo/posix/Asia/Colombo  Mon Sep 29 00:12:38 2014 IST
/usr/share/zoneinfo/Europe/Dublin  Sun Sep 28 19:42:39 2014 IST
/usr/share/zoneinfo/Eire  Sun Sep 28 19:42:39 2014 IST
/usr/share/zoneinfo/Asia/Kolkata  Mon Sep 29 00:12:39 2014 IST
/usr/share/zoneinfo/Asia/Calcutta  Mon Sep 29 00:12:39 2014 IST
/usr/share/zoneinfo/Asia/Colombo  Mon Sep 29 00:12:39 2014 IST
/usr/share/zoneinfo/right/Europe/Dublin  Sun Sep 28 19:42:14 2014 IST
/usr/share/zoneinfo/right/Eire  Sun Sep 28 19:42:14 2014 IST
/usr/share/zoneinfo/right/Asia/Kolkata  Mon Sep 29 00:12:14 2014 IST
/usr/share/zoneinfo/right/Asia/Calcutta  Mon Sep 29 00:12:14 2014 IST
/usr/share/zoneinfo/right/Asia/Colombo  Mon Sep 29 00:12:14 2014 IST

PDT我得到39场比赛。

如果您找到了所需的文件(可能需要在此处使用某种启发式方法找到您真正需要的文件),请将TZ变量设置为相应的名称。