Saya memiliki server yang berjalan dengan zona waktu diatur ke UTC
. Sepertinya itu adalah praktik yang baik (tolong perbaiki jika saya salah).
Bagaimanapun, salah satu server yang saya sambungkan, untuk scp
file, sedang berjalan EDT
dan menyimpan file yang saya perlu salin dalam format/path/to/filename/data20120913
Saya melihat mencoba rsync
file menggunakan sesuatu seperti -mtime -1
flag find untuk file yang dimodifikasi pada hari terakhir, tapi saya tidak beruntung.
Saya tidak keberatan hanya menggunakan scp
untuk menyalin file hari ini, tetapi pada saat ini ada jendela 4 jam di mana menjalankan date +%Y%m%d
akan memberikan hari yang berbeda pada setiap server dan itu sedikit mengganggu saya.
Melihat melalui man date
saya melihat bahwa saya dapat memiliki output waktu sebagai UTC
, tetapi saya tidak melihat cara untuk memiliki output sebagai zona waktu lain sepertiEDT
Saya kira saya juga bisa menggunakan sesuatu seperti GNU
ekstensi tanggal date -d 20100909 +%s
untuk mendapatkan tanggal dalam hitungan detik dari zaman, menerapkan 4 * 60 * 60
perhitungan manual kedua, dan melihat tentang menjadikannya sebagai tanggal - tetapi kemudian ketika waktu siang hari menendang di dalamnya masih akan menjadi satu jam libur .
Apakah ada cara yang lebih sederhana untuk menampilkan tanggal dalam YYYYMMDD
format untuk EDT
pada server yang diatur ke UTC
?
Jawaban:
Anda dapat menetapkan zona waktu selama durasi kueri, dengan demikian:
Perhatikan spasi putih antara
TZ
pengaturan dandate
perintah. Dalamrc
shell Bourne-like dan -like, yang menetapkanTZ
variabel hanya untuk baris perintah. Dalam kerang lainnya (csh
,tcsh
,fish
), Anda dapat selalu menggunakanenv
perintah sebagai gantinya:tl; dr
Di sistem Linux. zona waktu didefinisikan dalam file dalam
/usr/share/zoneinfo
direktori. Struktur ini sering disebut sebagai "database Olson" untuk menghormati kontributor pendiri.Aturan untuk setiap zona waktu didefinisikan sebagai baris file teks yang kemudian dikompilasi menjadi file biner. Garis yang dikompilasi, tentukan 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 "Amerika" berisi informasi yang diperlukan untuk New York dalam file
America/New_York
seperti yang digunakan, di atas.Berhati-hatilah bahwa spesifikasi zona yang tidak ada (nama file) diabaikan secara diam-diam dan waktu UTC dilaporkan. Misalnya, ini melaporkan waktu yang salah:
Spesifikasi UNIX Tunggal, versi-3, dikenal sebagai SUSv3 atau POSIX-2001, mencatat bahwa untuk portabilitas, string karakter yang mengidentifikasi deskripsi zona waktu harus dimulai dengan karakter titik dua. Jadi, kita juga bisa menulis:
Sebagai metode alternatif untuk spesifikasi zona waktu menggunakan pathname ke file deskripsi, SUSv3 menjelaskan model POSIX. Dalam format ini, string didefinisikan sebagai:
di mana
std
adalah nama komponen standar dandst
yang hemat di siang hari. Setiap nama terdiri dari tiga karakter atau lebih. Nilaioffset
positif untuk zona waktu di barat meridian utama dan negatif untuk zona timur meridian. Offset ditambahkan ke waktu lokal untuk mendapatkan UTC (sebelumnya dikenal sebagai GMT). Kolomstart
danend
waktu menunjukkan kapan transisi standar / siang hari terjadi.Misalnya, di Amerika Serikat bagian Timur, waktu standar adalah 5 jam lebih awal dari UTC, dan kami dapat menentukan
EST5EDT
sebagai penggantiAmerica/New_York
. Namun, alternatif ini tidak selalu diakui, terutama untuk zona di luar Amerika Serikat dan sebaiknya dihindari.HP-UX (sebuah UNIX yang memenuhi SUSv3) menggunakan aturan tekstual
/usr/lib/tztab
dan nama-nama POSIX seperti EST5EDT, CST6CDT, MST7MDT, PST8PDT. File tersebut mencakup semua aturan historis untuk setiap zona waktu, mirip dengan basis data Olson.CATATAN: Anda harus dapat menemukan semua zona waktu dengan memeriksa direktori berikut:
/usr/share/zoneinfo
.sumber
export
terlihat lebih baik daripadaenv
perintahAnda dapat melakukan ini dengan memanipulasi
TZ
variabel lingkungan. Berikut ini akan memberi Anda waktu lokal untuk AS / Timur, yang juga akan cukup pintar untuk menangani DST ketika itu bergulir:Nama zona berasal dari file dan direktori di dalamnya
/usr/share/zoneinfo
.sumber
Hati-hati! Tanggal akan dengan senang hati meludahkan waktu di zona waktu CURRENT Anda, jika Anda memberinya zona waktu yang tidak dikenali.
Lihat ini:
Perhatikan bahwa tidak ada zona waktu yang disebut EDT. Faktanya,
kembali
Dan ini bekerja:
Namun, jika teman Anda tinggal di tanah mistik Gobbledygook dan info zonanya bertepatan dengan milik Anda, Anda dapat membuat tanggal keluaran waktu di zona Gobbledygook dan dengan senang hati akan melakukannya dengan sedikit nilai keluar untuk memberi tahu Anda bahwa zona tidak diketahui:
sumber
TZ
string yang salah mengembalikan waktu UTC.sumber
The tanggal sintaks misterius dan rawan kesalahan, yang membuat baris perintah pemanggilan sakit. Karena itu saya menulis skrip kecil (saya menamakannya worldtime ), yang akan mencetak waktu yang ditentukan (atau saat ini) dari waktu dasar zome (yang lokal Anda) di beberapa zona waktu lain dan sebaliknya.
Ini dia. Sesuaikan agar sesuai dengan kebutuhan Anda, letakkan di jalur Anda, dan membuatnya dapat dieksekusi.
sumber
Seringkali Anda memiliki stempel waktu di zona waktu lokal dan Anda harus mengubahnya menjadi tz jarak jauh. Itu bisa dilakukan dengan:
dimana:
sumber