мировые часы командной строки? - PullRequest
7 голосов
/ 16 декабря 2008

Есть ли скрипт для отображения простых мировых часов (время в разных местах по всему миру) на * nix терминале?

Я думал о написании быстрого скрипта на Python, но у меня есть ощущение, что будет больше работы, чем я думаю (например, из-за конфигурации и формата вывода) - не говоря уже о изобретении колеса ...

Ответы [ 7 ]

16 голосов
/ 16 декабря 2008

У меня есть сценарий оболочки Bourne:

#!/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"
6 голосов
/ 16 декабря 2008

Никогда не думал об этом, но это не так уж трудно сделать.

#!/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 голосов
/ 06 марта 2009

Я использую это, которое в основном совпадает с другими предложениями, за исключением того, что оно фильтрует определенные зоны, которые вы хотите видеть:

#!/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
1 голос
/ 14 августа 2015

Существует . / Cpython-2.7 / Demo / curses / tclock.py , который является портом tclock.c - 1994 ASCII аналоговых / цифровых часов для curses, из примеров ncurses. Использование:

$ TZ=Europe/Paris python tclock.py

Вот видео .

1 голос
/ 16 декабря 2008

Если вы все еще хотите написать это на Python, рассмотрите Pytz:

http://pytz.sourceforge.net/

На их главной странице вы найдете множество простых способов выполнить то, что вы ищете.

Тем не менее, я уверен, что если вы потратите несколько минут на Google, вы найдете тонны сценариев, некоторые из которых даже запускают графические программы для * nix. Первый список результатов для "Python World Clock", кажется, предполагает это в одиночку.

0 голосов
/ 01 ноября 2018

Я создал простой сценарий оболочки , который вы можете вызвать, чтобы напечатать местоположение и дату / время в данном месте. Его логика на данный момент времени:

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
0 голосов
/ 13 августа 2015

Мне нравится предоставленный скрипт mivk . Поскольку я хочу иметь возможность указывать несколько зон без регулярных выражений, я адаптировал скрипт для использования bash, когда я не мог заставить оболочку bourne работать с массивами. В любом случае, наслаждайтесь и спасибо за отличный форум:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...