我有一个要求,我需要根据特定文件中指定的时区更改系统的时区,如果文件中指定的时区是“PDT”,我在/中找不到“PDT” usr / share / zoneinfo而不是它被命名为“PST8PDT”。有没有我可以grep并获取此信息的文件。 注意:文件中指定的时区可以是任何内容。
我需要将TZ变量设置为文件中指定的时区,该时区需要在/ usr / share / zoneinfo目录下。
答案 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
变量设置为相应的名称。