命令行世界时钟?

2024-06-02 06:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有脚本可以在*nix终端上显示一个简单的世界时钟(世界各地的时间)?在

我想写一个快速的Python脚本,但我觉得这比我想象的要多(例如,由于配置和输出格式),更不用说重新设计轮子了。。。在


Tags: 脚本终端格式nix时间轮子想象
3条回答

我使用这个,这与其他建议基本相同,只是它过滤了您想要查看的特定区域:

#!/bin/sh

# Show date and time in other time zones

search=$1

zoneinfo=/usr/share/zoneinfo/posix/
format='%a %F %T'

find -L $zoneinfo -type f \
    | grep -i "$search" \
    | while read z
      do
          d=$(TZ=$z date +"$format")
          printf "%-34s %23s\n" ${z#$zoneinfo} "$d"
      done

样本输出:

^{pr2}$

简单系统

从来没想过,但也不是很难做到。在

#!/bin/sh
# Command-line world clock

: ${WORLDCLOCK_ZONES:=$HOME/etc/worldclock.zones}
: ${WORLDCLOCK_FORMAT:='+%Y-%m-%d %H:%M:%S %Z'}

while read zone
do echo $zone '!' $(TZ=$zone date "$WORLDCLOCK_FORMAT")
done < $WORLDCLOCK_ZONES |
awk -F '!' '{ printf "%-20s  %s\n", $1, $2;}'

给定输入文件:

^{pr2}$

我得到了输出:

US/Pacific             2008-12-15 15:58:57 PST
Europe/London          2008-12-15 23:58:57 GMT
Europe/Paris           2008-12-16 00:58:57 CET
Asia/Kolkatta          2008-12-15 23:58:57 GMT
Africa/Johannesburg    2008-12-16 01:58:57 SAST
Asia/Tokyo             2008-12-16 08:58:57 JST
Asia/Shanghai          2008-12-16 07:58:57 CST

我很幸运,这只花了不到一秒钟的时间跑完,而且没有跨越1秒的界限。在

我没注意到加尔各答失败了,默认为GMT。也许我的系统仍然有亚洲/加尔各答作为进入印度的入口。


修正打字错误

11年后,我在加尔各答错拼了两个t,这里应该只有一个;谢谢你,@{a2}。我还在数据文件中添加了两个额外的条目&America/St_Johns(纽芬兰)和{},这两个条目分别与UTC有半小时和四分之三小时的偏移量(加尔各答也有半小时的偏移量)。例如,会产生:

US/Pacific             2020-01-09 06:17:40 PST
Europe/London          2020-01-09 14:17:40 GMT
Europe/Paris           2020-01-09 15:17:40 CET
Asia/Kolkata           2020-01-09 19:47:40 IST
Africa/Johannesburg    2020-01-09 16:17:40 SAST
Asia/Tokyo             2020-01-09 23:17:40 JST
Asia/Shanghai          2020-01-09 22:17:40 CST
America/St_Johns       2020-01-09 10:47:40 NST
Asia/Katmandu          2020-01-09 20:02:40 +0545

请注意,US/Pacific是一个古老的时区名称,它不是首选名称;它应该是America/Los_Angeles。在

把这些区域按顺序分类也许是明智的。添加sort -b -r -k2,2 -k3,3以按顺序列出时区,其中UTC最前面的时区列在最前面,最远落后的时区列在最后。-b选项(忽略字段的前导空格)很重要。再加上三个区域(Pacific/HonoluluPacific/KwajaleinPacific/Kiritimati),得到:

Pacific/Kiritimati     2020-01-10 04:33:25 +14
Pacific/Kwajalein      2020-01-10 02:33:25 +12
Asia/Tokyo             2020-01-09 23:33:25 JST
Asia/Shanghai          2020-01-09 22:33:25 CST
Asia/Katmandu          2020-01-09 20:18:25 +0545
Asia/Kolkata           2020-01-09 20:03:25 IST
Africa/Johannesburg    2020-01-09 16:33:25 SAST
Europe/Paris           2020-01-09 15:33:25 CET
Europe/London          2020-01-09 14:33:25 GMT
America/St_Johns       2020-01-09 11:03:25 NST
US/Pacific             2020-01-09 06:33:25 PST
Pacific/Honolulu       2020-01-09 04:33:25 HST

请注意,基里蒂马蒂和檀香山的时间是相同的,但日期相隔一天。当然,排序应该在脚本中:

#!/bin/sh
# Command-line world clock

: ${WORLDCLOCK_ZONES:=$HOME/etc/worldclock.zones}
: ${WORLDCLOCK_FORMAT:='+%Y-%m-%d %H:%M:%S %Z'}

while read zone
do echo $zone '!' $(TZ=$zone date "$WORLDCLOCK_FORMAT")
done < $WORLDCLOCK_ZONES |
awk -F '!' '{ printf "%-20s  %s\n", $1, $2;}' |
sort -b -r -k2,2 -k3,3

并且worldclock.zones文件包含:

US/Pacific
Europe/London
Europe/Paris
Asia/Kolkata
Africa/Johannesburg
Asia/Tokyo
Asia/Shanghai
America/St_Johns
Asia/Katmandu
Pacific/Honolulu
Pacific/Kwajalein
Pacific/Kiritimati
Pacific/Pago_Pago
UTC-12

Kiritimati在UTC+14时与UTC的偏移量最大。Pacific/Pago_Pago是UTC-11时与UTC偏移量最大的地方之一。 如果你去World Time Zone,他们列出了两个无人居住的岛屿,如果有人居住,可能在UTC-12。然而,Olson数据库并没有记录自1970-01-01截止日期以来无人居住的地方的时区信息,所以没有列出这些地方。在

全球26个时区

为了娱乐(简单的头脑很容易侧移),下面是一个时区名称列表,其中一个名称来自世界各地的大部分时区偏移量。是否有其他使用中的小时差(澳大利亚?),请告诉我。注意标准时间和夏时制时间-一些南半球的条目可能在夏令时。在2020年1月,该清单产生了所有的积分小时偏移量,但在2020年6月可能不会实现。在

该列表包括两个组成的区域名称:FarEast-12和{},它们分别位于UTC+12和UTC-12。这种积极和消极之间的冲突是因为存在相互冲突的标准。ISO 8601指定UTC以东(格林威治子午线,或多或少)使用UTC的正偏移,UTC以西的地方使用负偏移。同时,POSIX(又名ISO 9045)指定了相反的约定—UTC以西的地方使用正偏移量,而东部的位置使用负偏移量。这两个名称是POSIX时区名称,用于TZ环境变量,并使用偏移量和无夏令时规则进行指定。它们受POSIX偏移规则的约束。为什么会有差异?从根本上说,POSIX遵循了Unix的惯例——它不能在不破坏大量代码的情况下改变它们。ISO8601独立于POSIX,它从第一原则中派生出规则,并提出了一个合理的系统——但POSIX恰恰相反。在

区域名称列表:

US/Pacific
Europe/London
Europe/Paris
Asia/Kolkata
Africa/Johannesburg
Asia/Tokyo
Asia/Shanghai
America/St_Johns
Asia/Katmandu
Pacific/Honolulu
Pacific/Kwajalein
Pacific/Kiritimati
Pacific/Pago_Pago
FarEast-12
FarWest+12
US/Eastern
US/Central
US/Mountain
US/Alaska
Asia/Vladivostok
Pacific/Noumea
Pacific/Enderbury
Asia/Bangkok
Asia/Thimphu
Asia/Aqtau
Asia/Dubai
Africa/Addis_Ababa
Atlantic/Cape_Verde
Atlantic/South_Georgia
America/Santiago
America/Halifax

修改后脚本的输出示例(排序到位):

Pacific/Kiritimati        2020-01-10 05:24:10 +14
Pacific/Enderbury         2020-01-10 04:24:10 +13
Pacific/Kwajalein         2020-01-10 03:24:10 +12
FarEast-12                2020-01-10 03:24:10 FarEast
Pacific/Noumea            2020-01-10 02:24:10 +11
Asia/Vladivostok          2020-01-10 01:24:10 +10
Asia/Tokyo                2020-01-10 00:24:10 JST
Asia/Shanghai             2020-01-09 23:24:10 CST
Asia/Bangkok              2020-01-09 22:24:10 +07
Asia/Thimphu              2020-01-09 21:24:10 +06
Asia/Katmandu             2020-01-09 21:09:10 +0545
Asia/Kolkata              2020-01-09 20:54:10 IST
Asia/Aqtau                2020-01-09 20:24:10 +05
Asia/Dubai                2020-01-09 19:24:10 +04
Africa/Addis_Ababa        2020-01-09 18:24:10 EAT
Africa/Johannesburg       2020-01-09 17:24:10 SAST
Europe/Paris              2020-01-09 16:24:10 CET
Europe/London             2020-01-09 15:24:10 GMT
Atlantic/Cape_Verde       2020-01-09 14:24:10 -01
Atlantic/South_Georgia    2020-01-09 13:24:10 -02
America/Santiago          2020-01-09 12:24:10 -03
America/St_Johns          2020-01-09 11:54:10 NST
America/Halifax           2020-01-09 11:24:10 AST
US/Eastern                2020-01-09 10:24:10 EST
US/Central                2020-01-09 09:24:10 CST
US/Mountain               2020-01-09 08:24:10 MST
US/Pacific                2020-01-09 07:24:10 PST
US/Alaska                 2020-01-09 06:24:10 AKST
Pacific/Honolulu          2020-01-09 05:24:10 HST
Pacific/Pago_Pago         2020-01-09 04:24:10 SST
FarWest+12                2020-01-09 03:24:10 FarWest

时光流逝,现在东京已是午夜过后。在

我有一个bourne shell脚本:

#!/bin/sh

PT=`env TZ=US/Pacific date`
CT=`env TZ=US/Central date`
AT=`env TZ=Australia/Melbourne date`

echo "Santa Clara    $PT"
echo "Central        $CT"
echo "Melbourne      $AT"

相关问题 更多 >