Itu bukan bug. Ini adalah fitur.
Menurut javadoc untuk ZoneId
, bahwa sintaks POSIX untuk menentukan zona tidak didukung:
ID zona waktu
ID unik di dalam sistem. Ada tiga jenis ID.
Jenis ID yang paling sederhana adalah dari ZoneOffset. Ini terdiri dari 'Z'dan ID yang dimulai dengan '+' atau '-'.
Jenis ID berikutnya adalah ID gaya offset dengan beberapa bentuk awalan, seperti 'GMT+2' atau 'UTC+01:00'. Prefiks yang dikenali adalah 'UTC', 'GMT' dan 'UT'. Offset adalah akhiran dan akan dinormalisasi selama pembuatan. ID ini dapat dinormalisasi menjadi ZoneOffset menggunakan normalized().
Jenis ID ketiga adalah ID berbasis wilayah. ID berbasis kawasan harus terdiri dari dua karakter atau lebih, dan tidak dimulai dengan 'UTC', 'GMT', 'UT' '+'atau '-'. ID berbasis kawasan ditentukan oleh konfigurasi, lihat ZoneRulesProvider. Konfigurasi berfokus pada penyediaan pencarian dari ID ke ZoneRules yang mendasarinya.
Aturan zona waktu ditentukan oleh pemerintah dan sering berubah. Ada sejumlah organisasi, yang dikenal di sini sebagai grup, yang memantau perubahan zona waktu dan menyusunnya. Grup default adalah Basis Data Zona Waktu IANA (TZDB). Organisasi lain termasuk IATA (badan industri penerbangan) dan Microsoft.
Setiap grup menentukan formatnya sendiri untuk ID wilayah yang disediakannya. Grup TZDB menentukan ID seperti 'Eropa/London' atau 'Amerika/New_York'. ID TZDB lebih diutamakan daripada grup lain.
Lihat juga:
- TZ Var ke Java TimeZone?
Jika Anda menulis beberapa kode untuk menguraikan sintaks tersebut, Anda seharusnya dapat menggunakan data tersebut untuk membuat SimpleTimeZone
(javadoc). Sayangnya, ini memaksa untuk terus menggunakan Date
yang lama ("sebagian besar sudah usang") kelas dan teman.
java.time.*
baru (dalam Java 8). kelas tampaknya tidak memiliki cara mudah untuk membuat ZoneId
Anda sendiri dari seperangkat aturan. (Mungkin bisa dilakukan dengan mengimplementasikan ZoneRuleProvider
Anda sendiri (javadoc), tetapi terlihat rumit.)
Jadi (IMO) Anda akan lebih baik membuat OS Anda menggunakan id zona TZDB standar.
Anda berkomentar:
Pada sistem khusus ini, baik "/etc/localtime" maupun "/etc/timezone" tidak ada.
Jika Anda menjalankan Ubuntu Bionic, "/etc/localtime" harus ada. Itu harus berupa symlink ke file zona waktu biner di pohon "/usr/share/zoneinfo". Lihat https://linuxize.com/post/how-to-set-or-change-timezone-on-ubuntu-18-04/. Atau mungkin masalahnya adalah sistem sengaja dikonfigurasi untuk tidak mengetahui zona waktu lokalnya.