是否有一个脚本可以在* nix终端上显示一个简单的世界时钟(世界各地的时间)?
我正在考虑编写一个快速的Python脚本,但我觉得这将比我想象的更多(例如由于配置和输出格式) - 更不用说重新发明轮子......
答案 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:
他们的头版向您展示了许多简单的方法来完成您所寻找的目标。
那就是说,我敢肯定你是否花了几分钟在谷歌上发现了大量的脚本,有些甚至为* 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