Chuyển đổi múi giờ theo dòng lệnh


19

Tôi biết về http://www.timeanddate.com/worldclock/converter.html

Tôi không thể tìm ra cách truy vấn http://www.google.com theo định dạng tự nhiên lành mạnh như "5pm BST in PST".

Hay tôi phải viết một ứng dụng như vậy?


bạn có ý nghĩa gì chính xác? Dòng lệnh linux? Lệnh bạn có thể gõ vào Google? Gì?!
Dal Hundal

dòng lệnh trong shell và hộp truy vấn của google đều là một dòng lệnh đối với tôi
hendry

1
có lẽ một công cụ tốt hơn sẽ làm các thành phố theo mã sân bay, 5pm LHR trong SFO
hendry

@hendry dateutils có thể thực hiện chuyển đổi múi giờ dựa trên mã sân bay iata và icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Câu trả lời:


35

Bây giờ là 6 giờ tối tại Đài Bắc, mấy giờ ở đây?

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

Lúc 11h ở London, mấy giờ ở Đài Bắc?

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

Lạ, nhưng cách đầu tiên không hiệu quả với tôi: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- tức là nó chỉ cho tôi biết ngày ở Đài Bắc, không phải ngày địa phương của tôi cho thời điểm đó. Mặc dù manpage nói rằng phương pháp của bạn là chính xác. Tôi có thiếu thứ gì không? .. coreutils 8.26, Arch Linux
MarSoft

Để tìm mã định danh múi giờ, hãy sử dụng một số thứ như: timedatectl list-timezones|grep -i taipei(bản in Asia/Taipei), timedatectl list-timezones|grep -i berlin(bản in Europe/Berlin), timedatectl list-timezones|grep -i angeles(bản in America/Los_Angeles)
exebook

5

Ví dụ này là từ http://www.pixelbeat.org/cmdline.html#dates

Nó cho thời gian địa phương tương ứng với 9 giờ sáng ở bờ biển phía tây nước Mỹ, chiếm tỷ lệ chuyển đổi tiết kiệm ánh sáng ban ngày khác nhau.

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

Sử dụng tzselect để lấy TZ. Các định dạng PST là mơ hồ. IST = Giờ chuẩn Ấn Độ và Giờ mùa hè Ailen chẳng hạn.


2
Không biết về tzselect, cảm ơn. Nếu bạn nhập sai 'TZ', bạn có thể nhận được kết quả sai lệch, ví dụ: TZ = ngày London Thứ Sáu 16 tháng 7 10:28:51 London 2010
hendry

5

Tôi nghĩ rằng điều này gần với những gì OP yêu cầu (Vì anh ấy không nhất thiết phải biết rằng BST là Đài Bắc? Và câu trả lời không giải thích làm thế nào để đến "Châu Á / Đài Bắc" từ 'BST').

Ngày đầu tiên của tôi:

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

Sau đó, ngày tôi muốn biết:

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

Vì vậy, tôi biết rằng đó 5pm BSTlà 2 giờ.

Tôi thường quên nếu tôi phải thêm hoặc xóa hai giờ từ EDT lần để tôi có một đoạn script nhỏ với các múi giờ chung mà tôi phải làm việc với:

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

Và đầu ra:

$ 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

Vị trí hợp lệ cho tztập lệnh của bạn có thể được tìm thấy ở đây /usr/share/zoneinfo.

Nhưng một lần nữa, trong thời gian tới tôi chỉ sử dụng date -d '<time> <timezone>'.


2

Sử dụng Wolfram Alpha . Đến URL cơ bản

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

nối thêm chuyển đổi, với không gian được thay thế bởi +. Ví dụ:

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

Lưu ý rằng Wolfram Alpha dường như không nhận ra BSTlà múi giờ.


Làm thế nào để một người nhanh chóng tra cứu mã múi giờ?
hendry

@hendry Đây là một bản đồ trực tuyến tương tác thú vị: timeanddate.com/time/map/#!cities=241
DavidG

1

Tôi biết đó là một chủ đề cũ, nhưng tôi cần một mã cho cùng một trường hợp sử dụng và, dựa trên các ý tưởng ở đây, đã phát triển tập lệnh bash nhỏ này:

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

Bạn có thể sử dụng để kiểm tra chênh lệch thời gian hôm nay hoặc trong một ngày trong tương lai:

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


kịch bản tuyệt vời! đã được thêm vào bộ công cụ của tôi, cảm ơn! Bạn có nghĩ rằng có thể hiển thị thời gian trong các cột thay vì hàng không?
Caesarpachon

Có lẽ. Tôi không thấy sử dụng cho điều đó, mặc dù.
Iuri Gavronski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.