GNU/Linux >> Linux Esercitazione >  >> Linux

JRE supporta la descrizione posix TZ anziché il nome TZ?

Non è un errore. È una caratteristica.

Secondo il javadoc per ZoneId , che la sintassi POSIX per specificare le zone non è supportata:

ID fuso orario

L'ID è univoco all'interno del sistema. Esistono tre tipi di ID.

Il tipo più semplice di ID è quello di ZoneOffset. È composto da "Z" e ID che iniziano con "+" o "-".

Il prossimo tipo di ID sono ID in stile offset con una qualche forma di prefisso, come "GMT+2" o "UTC+01:00". I prefissi riconosciuti sono 'UTC', 'GMT' e 'UT'. L'offset è il suffisso e verrà normalizzato durante la creazione. Questi ID possono essere normalizzati in un ZoneOffset utilizzandonormalized().

Il terzo tipo di ID sono gli ID basati sulla regione. Un ID basato sulla regione deve contenere due o più caratteri e non iniziare con "UTC", "GMT", "UT", "+" o "-". Gli ID basati sulla regione sono definiti dalla configurazione, vedereZoneRulesProvider. La configurazione si concentra sul fornire la ricerca dall'ID alle ZoneRules sottostanti.

Le regole del fuso orario sono definite dai governi e cambiano frequentemente. Esistono diverse organizzazioni, qui note come gruppi, che monitorano i cambiamenti del fuso orario e li raccolgono. Il gruppo predefinito è il database dei fusi orari IANA (TZDB). Altre organizzazioni includono IATA (l'ente del settore delle compagnie aeree) e Microsoft.

Ogni gruppo definisce il proprio formato per l'ID regione che fornisce. Il gruppo TZDB definisce ID come "Europa/Londra" o "America/New_York". Gli ID TZDB hanno la precedenza sugli altri gruppi.

Vedi anche:

  • Varia da TZ a fuso orario Java?

Se hai scritto del codice per analizzare quella sintassi, dovresti essere in grado di utilizzare i dati per costruire un SimpleTimeZone (javadoc). Sfortunatamente, questo costringe a continuare ad utilizzare il vecchio Date ("per lo più deprecato"). classe e amici.

Il nuovo (in Java 8) java.time.* le classi non sembrano avere un modo semplice per costruire il proprio ZoneId da un insieme di regole. (Forse potrebbe essere fatto implementando il tuo ZoneRuleProvider (javadoc), ma sembra complicato.)

Quindi (IMO) faresti meglio a far sì che il tuo sistema operativo utilizzi gli ID di zona TZDB standard.

Hai commentato:

Su questo particolare sistema non esistono né "/etc/localtime" né "/etc/timezone".

Se stai utilizzando Ubuntu Bionic, dovrebbe esistere "/etc/localtime". Dovrebbe essere un collegamento simbolico a un file di fuso orario binario nell'albero "/usr/share/zoneinfo". Vedere https://linuxize.com/post/how-to-set-or-change-timezone-on-ubuntu-18-04/. O forse il problema è che il sistema è stato deliberatamente configurato per non conoscere il suo fuso orario locale.


Linux
  1. Qual è il significato di POSIX?

  2. Cosa significa un punto prima del nome della variabile in struct?

  3. Usa l'installazione predefinita di Python anziché l'installazione di Anaconda quando viene chiamata dal terminale

  4. Connettiti a Linux per nome piuttosto che per IP

  5. Perché Linux usa una partizione di swap piuttosto che un file?

Come funziona il comando Tee?

Perché il supporto per Kubuntu e Xubuntu 16.04 Lts termina prima della data ufficiale di Ubuntu Eol?

Cosa fa il permesso di esecuzione?

Come funziona il comando ps?

Come funziona l'interfaccia di loopback

Cosa significa la capacità ep?