Перетворення часового поясу за командним рядком


20

Я знаю про http://www.timeanddate.com/worldclock/converter.html

Я не можу зрозуміти, як здійснити запит на http://www.google.com у такому природному форматі, як "5 вечора за тихоокеанським часом".

Або мені потрібно написати таку програму?


Що саме ви маєте на увазі? Командний рядок linux? Команду, яку ви можете ввести в Google? Що?!
Dal Hundal

командний рядок у оболонці та поле запиту google - це командний рядок для мене
hendry

1
можливо, кращим інструментом стане місто за кодами аеропортів, 17:00 LHR в СФО
хендрі

@hendry dateutils може зробити перетворення часових поясів на основі кодів аеропорту iata та icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Відповіді:


38

У Тайбеї 6 вечора, час тут?

date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010

О 11 годині тут, у Лондоні, час у Тайбеї?

TZ=Asia/Taipei date -d "11:00 BST"
Fri Jul 16 18:00:00 CST 2010

Дивно, але перший спосіб для мене не працює: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- тобто він просто повідомляє мені дату в Тайбеї, а не мою місцеву дату для цього моменту часу. Хоча manpage каже, що ваш метод правильний. Я щось пропускаю? .. coreutils 8.26, Arch Linux
MarSoft

Щоб знайти ідентифікатор часового поясу, використовуйте щось таке: timedatectl list-timezones|grep -i taipei(принти Asia/Taipei), timedatectl list-timezones|grep -i berlin(відбитки Europe/Berlin), timedatectl list-timezones|grep -i angeles(відбитки America/Los_Angeles)
exebook

6

Цей приклад із http://www.pixelbeat.org/cmdline.html#dates

Це дає місцевий час, відповідний 9:00 на західному узбережжі США, що обумовлює різні переходи на денну економію.

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

Використовуйте tzselect, щоб отримати TZ. Формат PST неоднозначний. IST = індійський стандартний час та, наприклад, літній час Ірландії.


3
Не знав про tzselect, спасибі Якщо ви введете неправильний вклад "TZ", ви можете отримати оманливі результати, наприклад, TZ = Лондонська дата Пт 16 липня 10:28:52 Лондон 2010
Хендрі

6

Я думаю, це ближче до того, що запитувала ОП (Оскільки він не обов'язково знає, що BST - Тайбей? І відповідь не пояснює, як дістатися до "Азії / Тайбею" з "BST").

Перша моя поточна дата:

$ date
Mon Apr 21 13:07:21 MDT 2014

Тоді дата, яку я хочу знати:

$ date -d '5pm BST'
Mon Apr 21 15:00:00 MDT 2014

Тож я знаю, що 5pm BSTце 2 години.

Зазвичай я забуваю, якщо мені потрібно додати або видалити дві години з EDT разів, тому у мене є невеликий сценарій із загальними часовими поясами, з якими я повинен працювати:

$ cat tz
#!/bin/bash
TZ='America/Edmonton' date
TZ='America/Chicago' date
TZ='America/New_York' date

І вихід:

$ tz
Mon Apr 21 13:12:32 MDT 2014
Mon Apr 21 14:12:32 CDT 2014
Mon Apr 21 15:12:32 EDT 2014

Дійсні місця для вашого tzсценарію можна знайти тут /usr/share/zoneinfo.

Але знову ж таки, на часи в майбутньому я просто використовую date -d '<time> <timezone>'.


2

Використовуйте Wolfram Alpha . До основної URL-адреси…

http://www.wolframalpha.com/input/?i=

додати перетворення з пробілами, заміненими на +. Наприклад:

http://www.wolframalpha.com/input/?i=5+PM+CET+to+PST

Зауважте, що Вольфрам Альфа не здається визнаним BSTчасовим поясом.


як швидко знайти коди часового поясу?
хендрі

@hendry Це крута інтерактивна онлайн-карта: timeanddate.com/time/map/#!cities=241
DavidG

1

Я знаю, що це стара нитка, але мені знадобився код для того самого випадку використання, і, виходячи з ідей тут, розробив цей маленький скрипт bash:

#!/bin/bash
# ig20180122 - displays meeting options in other time zones
# set the following variable to the start and end of your working day
myday="8 20" # start and end time, with one space
# set the local TZ
myplace='America/Sao_Paulo'
# set the most common places
place[1]='America/Toronto'
place[2]='America/Chicago' # Houston as well
place[3]='Europe/Amsterdam'
place[4]='Europe/Dublin'
# add cities using place[5], etc.
# set the date format for search
dfmt="%m-%d" # date format for meeting date
hfmt="+%B %e, %Y" # date format for the header
# no need to change onwards
format1="%-10s " # Increase if your cities are large
format2="%02d "
mdate=$1
if [[ "$1" == "" ]]; then mdate=`date "+$dfmt"`; fi
date -j -f "$dfmt" "$hfmt" "$mdate"
here=`TZ=$myplace date -j -f "$dfmt" +%z  "$mdate"`
here=$((`printf "%g" $here` / 100))
printf "$format1" "Here" 
printf "$format2" `seq $myday` 
printf "\n"
for i in `seq 1 "${#place[*]}"`
do
    there=`TZ=${place[$i]} date -j -f "$dfmt" +%z  "$mdate"`
    there=$((`printf "%g" $there` / 100))
    city[$i]=${place[$i]/*\//}
    tdiff[$i]=$(($there - $here))
    printf "$format1" ${city[$i]}
    for j in `seq $myday`
    do
        printf "$format2" $(($j+${tdiff[$i]}))
    done
    printf "(%+d)\n" ${tdiff[$i]}
done

Ви можете або перевірити різницю в часі сьогодні або в майбутньому:

16:08 $ meet
January 22, 2019
Here       08 09 10 11 12 13 14 15 16 17 18 19 20 
Toronto    05 06 07 08 09 10 11 12 13 14 15 16 17 (-3)
Chicago    04 05 06 07 08 09 10 11 12 13 14 15 16 (-4)
Amsterdam  11 12 13 14 15 16 17 18 19 20 21 22 23 (+3)
Dublin     10 11 12 13 14 15 16 17 18 19 20 21 22 (+2)
16:13 $ meet 05-24
May 24, 2019
Here       08 09 10 11 12 13 14 15 16 17 18 19 20 
Toronto    07 08 09 10 11 12 13 14 15 16 17 18 19 (-1)
Chicago    06 07 08 09 10 11 12 13 14 15 16 17 18 (-2)
Amsterdam  13 14 15 16 17 18 19 20 21 22 23 24 25 (+5)
Dublin     12 13 14 15 16 17 18 19 20 21 22 23 24 (+4)
16:13 $ 

HTH


фантастичний сценарій! вже додано до мого набору інструментів, дякую! чи вважаєте ви, що можна відображати час у стовпцях замість рядків?
cesarpachon

Можливо. Я не бачу користі для цього.
Юрі Гавронський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.