命令行世界时钟?

时间:2008-12-15 23:39:24

标签: python timezone command-line-interface

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

我正在考虑编写一个快速的Python脚本,但我觉得这将比我想象的更多(例如由于配置和输出格式) - 更不用说重新发明轮子......

7 个答案:

答案 0 :(得分:16)

我有这个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"

答案 1 :(得分:6)

从未想过这一点,但并不是很难做到。

#!/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;}'

给定输入文件:

US/Pacific
Europe/London
Europe/Paris
Asia/Kolkatta
Africa/Johannesburg
Asia/Tokyo
Asia/Shanghai

我得到了输出:

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秒的界限。

我没注意到Kolkatta失败并违反了GMT。我的系统仍然有亚洲/加尔各答作为印度的入口。

答案 2 :(得分:2)

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

#!/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

示例输出:

$ /usr/local/bin/wdate bang
Africa/Bangui                      Fri 2009-03-06 11:04:24
Asia/Bangkok                       Fri 2009-03-06 17:04:24

答案 3 :(得分:1)

如果您仍想用Python编写,请考虑Pytz:

http://pytz.sourceforge.net/

他们的头版向您展示了许多简单的方法来完成您所寻找的目标。

那就是说,我敢肯定你是否花了几分钟在谷歌上发现了大量的脚本,有些甚至为* nix推出了图形程序。 “python world clock”的第一个结果列表似乎只是建议这一点。

答案 4 :(得分:1)

来自ncurses-examples的tclock.c的端口./cpython-2.7/Demo/curses/tclock.py - curses的1994 ASCII模拟/数字时钟。用法:

$ TZ=Europe/Paris python tclock.py

这是video

答案 5 :(得分:0)

我喜欢提供的脚本mivk。 因为我希望能够在没有正则表达式的情况下指定多个区域,所以当我无法使用bourne shell来处理数组时,我调整了脚本以使用bash。 无论如何,享受并感谢一个伟大的论坛:

#!/usr/bin/env bash                                                             

# Show date and time in other time zones, with multiple args                                        


elements=$@

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

for search in ${elements[@]}; do

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

示例输出:

/usr/local/bin/wdate Sydney Stockholm /Australia/Sydney Fri 2015-08-14 05:54:26 /Europe/Stockholm Thu 2015-08-13 21:54:26

答案 6 :(得分:0)

我创建了一个simple shell script,您可以调用它在给定位置打印位置和日期/时间。此时此刻的逻辑:

TIME_ZONES="Europe/Amsterdam America/Los_Angeles Europe/Dublin"
OUTPUT=""

for loc in $TIME_ZONES; do
    CITY=`echo $loc | sed 's/\// /g' | awk '{ print $2 }'`
    CUR_TIME=`TZ=${loc} date | awk '{ print $2 " " $3 " " $5 }'`
    TEMP=`awk -v l="$CITY" -v t="$CUR_TIME" 'BEGIN { print l "\t" t }'`
    OUTPUT="${OUTPUT}\n${TEMP}"
done

echo $OUTPUT | column -t

返回:

Amsterdam    1   Nov  01:03:30
Los_Angeles  31  Oct  17:03:30
Dublin       1   Nov  00:03:30