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.
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
.