GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Membuat `date` Menghasilkan Waktu Dari Zona Waktu yang Berbeda?

Saya memiliki server yang berjalan dengan zona waktu yang disetel ke UTC . Sepertinya itu adalah praktik yang baik (mohon koreksi jika saya salah).

Bagaimanapun, salah satu server yang saya sambungkan, untuk scp file, berjalan di EDT dan menyimpan file yang perlu saya salin dalam format /path/to/filename/data20120913

Saya melihat mencoba rsync file menggunakan sesuatu seperti find's -mtime -1 tandai file yang dimodifikasi pada hari terakhir, tetapi saya tidak beruntung.

Saya tidak keberatan hanya menggunakan scp untuk menyalin file hari ini, tetapi saat ini ada jendela 4 jam di mana menjalankan date +%Y%m%d akan memberikan hari yang berbeda di setiap server dan itu sedikit mengganggu saya.

Melihat melalui man date Saya melihat bahwa saya dapat memiliki keluaran waktu sebagai UTC , tapi saya tidak melihat cara untuk menampilkannya sebagai zona waktu lain seperti EDT

Saya kira saya juga bisa menggunakan sesuatu seperti GNU ekstensi tanggal date -d 20100909 +%s untuk mendapatkan tanggal dalam hitungan detik dari zaman, terapkan 4 * 60 * 60 manual perhitungan kedua, dan lihat tentang rendering itu sebagai tanggal – tetapi kemudian ketika siang hari dimulai, itu masih akan menjadi satu jam off.

Apakah ada cara yang lebih sederhana untuk menampilkan tanggal dalam YYYYMMDD format untuk EDT pada server yang disetel ke UTC ?

Jawaban yang Diterima:

Anda dapat mengatur zona waktu untuk durasi kueri, dengan demikian:

TZ=America/New_York date

Perhatikan spasi putih di antara TZ pengaturan dan date memerintah. Di Bourne-like dan rc -seperti shell, yang menyetel TZ variabel hanya untuk baris perintah. Di shell lain (csh , tcsh , fish ), Anda selalu dapat menggunakan env perintah sebagai gantinya:

env TZ=America/New_York date

tl;dr

Pada sistem Linux. zona waktu ditentukan dalam file di /usr/share/zoneinfo direktori. Struktur ini sering disebut sebagai “basis data Olson” untuk menghormati kontributor pendirinya.

Aturan untuk setiap zona waktu didefinisikan sebagai baris file teks yang kemudian dikompilasi menjadi file biner. Garis-garis yang dikompilasi, menentukan nama zona; rentang data dan waktu selama zona tersebut berlaku; offset dari UTC untuk waktu standar; dan notasi untuk menentukan bagaimana transisi ke dan dari waktu musim panas terjadi, jika berlaku.

Misalnya, direktori “America” berisi informasi yang diperlukan untuk New York dalam file America/New_York seperti yang digunakan, di atas.

Hati-hati bahwa spesifikasi zona yang tidak ada (nama file) diabaikan secara diam-diam dan waktu UTC dilaporkan. Misalnya, ini melaporkan waktu yang salah:

TZ="America/New York" date ### WRONG ###

Spesifikasi UNIX Tunggal, versi-3, yang dikenal sebagai SUSv3 atau POSIX-2001, mencatat bahwa untuk portabilitas, string karakter yang mengidentifikasi deskripsi zona waktu harus dimulai dengan karakter titik dua. Dengan demikian, kita juga dapat menulis:

TZ=":America/New_York" date
TZ=":America/Los_Angeles" date

Sebagai metode alternatif untuk spesifikasi zona waktu menggunakan nama path ke file deskripsi, SUSv3 menjelaskan model POSIX. Dalam format ini, string didefinisikan sebagai:

std offset [dst[offset][,start-date[/time],end-date[/time]]]

dimana std adalah nama komponen standar dan dst adalah waktu musim panas. Setiap nama terdiri dari tiga karakter atau lebih. offset positif untuk zona waktu di sebelah barat meridian utama dan negatif untuk zona waktu di sebelah timur meridian. Offset ditambahkan ke waktu lokal untuk mendapatkan UTC (sebelumnya dikenal sebagai GMT). start dan end bidang waktu menunjukkan kapan transisi standar/siang hari terjadi.

Terkait:Excel – perkiraan tanggal masa depan berdasarkan jumlah hari rata-rata antara sejumlah variabel tanggal di masa lalu?

Misalnya, di Amerika Serikat Bagian Timur, waktu standar adalah 5 jam lebih awal dari UTC, dan kita dapat menentukan EST5EDT sebagai pengganti America/New_York . Namun, alternatif ini tidak selalu dikenali, terutama untuk zona di luar Amerika Serikat dan sebaiknya dihindari.

HP-UX (UNIX yang mendukung SUSv3) menggunakan aturan tekstual di /usr/lib/tztab dan nama POSIX seperti EST5EDT, CST6CDT, MST7MDT, PST8PDT. File tersebut mencakup semua aturan historis untuk setiap zona waktu, mirip dengan database Olson.

CATATAN: Anda seharusnya dapat menemukan semua zona waktu dengan memeriksa direktori berikut:/usr/share/zoneinfo .


Linux
  1. Cara Memeriksa Zona Waktu di Linux

  2. Cara menyinkronkan tanggal dan waktu dari baris perintah di Ubuntu

  3. Atur tanggal, waktu, dan zona waktu di server Linux

  1. CentOS / RHEL :Cara mendapatkan tanggal dan waktu perintah yang dieksekusi di output perintah history

  2. Bagaimana Anda mengambil waktu saat ini di server?

  3. Bagaimana suatu proses tampaknya memiliki nama yang berbeda dalam keluaran ps?

  1. Bagaimana Melakukan A Ls Dan Kemudian Mengurutkan Hasil Berdasarkan Tanggal Dibuat?

  2. Bagaimana Cara Mengatur Variabel Sama Dengan Output Dari Perintah Di Grub2?

  3. Bagaimana cara mengekstrak waktu durasi dari keluaran ffmpeg?