Bagaimana cara memeriksa zona waktu di Linux?

129

Apakah ada cara untuk memeriksa zona waktu saya saat ini di Linux?

Peter Mortensen
sumber

Jawaban:

19

Biasanya, TZvariabel lingkungan akan memberi tahu Anda sesuatu yang bermanfaat. Namun, yang terbaik adalah menggunakan fungsi seperti mktime()dan localtime()untuk mengkonversi antara time_tdan representasi zona waktu lokal. Artinya, jangan mencoba melakukan konversi sendiri .

Greg Hewgill
sumber
2
Adakah perintah yang memberitahukan tentang zona waktu pengguna?
26
Tentu, dateakan memberitahumu.
Greg Hewgill
Saya punya dua contoh server, jika saya memberikan perintah "tanggal" di kedua server itu menunjukkan waktu yang berbeda. zona waktu untuk kedua server adalah IST, waktu satu server: Sen 11 Juli 10:39:31 IST 2011 dan server lain Sen 11 Jul 10:35:31 IST 2011 .. ada perbedaan 4 menit
8
On Precise Pangolin echo $TZtidak mengembalikan apa pun untuk saya.
Iain Samuel McLean Penatua
3
@GregHewgill jawaban Anda tidak membantu pada tampilan pertama. Silakan pertimbangkan untuk mengedit jawaban Anda. Lihat jawaban yang paling banyak dipilih di bawah ini. Saya akan menurunkan jawaban Anda untuk saat ini. Juga tidak ada TZ env pada pengaturan standar pada mesin saya.
therealmarv
244

Jika Anda maksud dari konsol, ketikkan:

date +%Z
Rasman
sumber
2
bagus, bekerja dengan baik.
Silver Moon
15
ini seharusnya jawaban yang diterima
KalenGi
poin bagus ... mengubah jawaban untuk efek itu
Rasman
Dan untuk mengatur zona waktu dari baris perintah di Ubuntu, tautan berikut memberikan perintah sepele, 1-baris untuk melakukannya: askubuntu.com/a/524362/182454
Dan Nissenbaum
Ini memberi +07saya. Untuk mendapatkan Region/CityLinux berbasis Debian / Arch, lihat jawaban ini .
Tom Hale
54

Jika Anda ingin zona waktu numerik:

date +'%:z %Z'

Output sampel:

-05:00 EST
Paul Vargas
sumber
7
Pada OS X output ini:z EST
tersangka
7
Ini jika untuk linux .
Paul Vargas
1
Lebih tepatnya, ini berlaku untuk GNU date. Versi BusyBox mencetak sesuatu yang tidak masuk akal, "%: z CEST" dalam kasus saya.
Léo Lam
Namun, tanggal +% z berfungsi dengan baik pada OS X. Saya sarankan Anda memodifikasi jawabannya.
Neil Mayhew
1
Hai, @NeilMayhew Terima kasih! Humm ... tapi pertanyaannya ada pada taglinux ubuntu-10.04
Paul Vargas
24

Saya ingin mencari zona waktu dalam bentuk "AS / Timur" atau "Eropa / London". Anda dapat menemukannya di:

  • / etc / timezone (hadir di Ubuntu dan Red Hat? tetapi tidak misalnya Amazon Linux)
  • (pada sistem gaya Red Hat) seperti ZONE="US/Eastern"di / etc / sysconfig / clock
  • atau Anda dapat mencoba dan mencocokkan / etc / localtime dengan salah satu file di bawah / usr / share / zoneinfo; menjengkelkan ini tampaknya tidak menjadi symlink, tetapi Anda bisa misalnya

    cd / usr / share / zoneinfo
    find * -type f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \;

    untuk menemukan file yang cocok - mungkin ada cara yang lebih baik untuk melakukannya, tetapi itu berhasil. Akan ada beberapa pertandingan.

Rup
sumber
4
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
freiheit
6

Kadang-kadang Anda mungkin mencari zona waktu kanonik daripada bentuk pendek seperti yang diproduksi oleh date %Zmis US/Eastern. Pada sistem dengan timedatectleg Fedora, timedatectlmengeluarkan banyak informasi berguna, termasuk zona saat ini:

# timedatectl
      Local time: Tue 2016-09-13 17:10:26 EDT
  Universal time: Tue 2016-09-13 21:10:26 UTC
        RTC time: Tue 2016-09-13 21:10:26
       Time zone: US/Eastern (EDT, -0400)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Sayangnya, timedatectlmengambil set-timezonesebagai perintah, tetapi tidak memiliki yang sesuai get-timezone. Pisahkan sebagai berikut:

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
Raman
sumber
4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

Jadi saya di Waktu Gunung. Meskipun saran di atas tentang penggunaan variabel lingkungan atau keluaran perintah hanya tanggal kadang-kadang bekerja lebih baik, tergantung bagaimana Anda ingin menggunakannya.

Tagar
sumber
3

Untuk zona waktu, Anda dapat menggunakan geolokasi:

$ curl https://ipapi.co/timezone
America/Chicago

Atau:

$ curl http://ip-api.com/line?fields=timezone
America/Chicago

http://wiki.archlinux.org/index.php/time#Time_zone

Steven Penny
sumber
2
  • / etc / sysconfig / clock menyetel apakah jam perangkat keras disimpan sebagai UTC atau waktu lokal.
  • Symlink / etc / localtime ke / usr / share / zoneinfo / ... untuk mengatur zona waktu Anda.
  • Ketik /sbin/hwclock --systohc [--utc]untuk mengatur jam perangkat keras.

Kernel Linux selalu menyimpan dan menghitung waktu sebagai jumlah detik sejak tengah malam tanggal 1 Januari 1970 UTC terlepas dari apakah jam perangkat keras Anda disimpan sebagai UTC atau tidak. Konversi ke waktu lokal Anda dilakukan pada saat run-time. Satu hal yang rapi tentang ini adalah bahwa jika seseorang menggunakan komputer Anda dari zona waktu yang berbeda, mereka dapat mengatur variabel lingkungan TZ dan semua tanggal dan waktu akan tampak benar untuk zona waktu mereka.

Jika jumlah detik sejak 1 Januari 1970 UTC disimpan sebagai bilangan bulat 32-bit yang ditandatangani (seperti pada sistem Linux / Intel Anda), jam Anda akan berhenti berfungsi pada suatu waktu di tahun 2038. Linux tidak memiliki masalah Y2K yang melekat , tetapi memiliki masalah tahun 2038. Semoga kita semua akan menjalankan Linux pada sistem 64-bit saat itu. Bilangan bulat 64-bit akan membuat jam kami berjalan dengan sangat baik hingga sekitar tahun 292271-juta.

Rup
sumber
1

Beberapa solusi:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

memberi saya (masing-masing):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

Komputer saya ada di UTC.

tika
sumber
0

Menggunakan TZ atau tanggal TIDAK DAPAT DIANDALKAN karena ini memberi tahu Anda zona waktu USER, bukan zona waktu sistem default.

Zona waktu sistem default disimpan di / etc / timezone (yang sering merupakan tautan simbolis ke file data zona waktu khusus untuk zona waktu). Jika Anda tidak memiliki / etc / zona waktu, lihat / etc / localtime. Umumnya itu adalah zona waktu "server". / etc / localtime seringkali merupakan symlink ke file zona waktu di / usr / share / zoneinfo. Jalur ke file zona waktu yang benar akan sering memberi Anda informasi geografi juga.

Linux yang lebih baru memiliki "timedatectl" yang memberi Anda banyak info ketika perintah dijalankan.

(sebagai simpul samping, jika Anda memiliki sistem kuno yang masih menggunakan zona waktu hard-coded LAMA, Anda mungkin dapat menyalin file zona waktu modern ke dalamnya dan itu akan berfungsi. Saya harus melakukan ini berkali-kali untuk menyelesaikan perubahan zona waktu. pada peralatan yang lebih tua).

TekOps
sumber
0

Terkadang timedatectl set-timezonetidak diperbarui/etc/timezone , jadi yang terbaik adalah mendapatkan tiemzone dari nama file yang /etc/timezoneditunjuk symlink :

#!/bin/bash
set -euo pipefail

if filename=$(readlink /etc/localtime); then
    # /etc/localtime is a symlink as expected
    timezone=${filename#*zoneinfo/}
    if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
        # not pointing to expected location or not Region/City
        >&2 echo "$filename points to an unexpected location"
        exit 1
    fi
    echo "$timezone"
else  # compare files by contents
    # https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
    find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
        cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi

Referensi: dalam jawaban ini .

Tom Hale
sumber
0

Anda dapat menampilkan tanggal dan zona waktu secara bersamaan:

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
Mohsen Abasi
sumber