So passen Sie das Datumsformat Ihrer Region in drei Schritten an

So passen Sie das Datumsformat Ihrer Region in drei Schritten an

Auf meinem System werden derzeit standardmäßig folgende dateAusgaben angezeigt:

$ date
Fri 29 Jan 22:04:26 GMT 2016

Wenn ich jedoch versuche, Daten in diesem Format wieder einzugeben, datewird „ungültiges Datum“ angezeigt:

$ date -d "$(date)"
date: invalid date ‘Fri 29 Jan 22:06:14 GMT 2016’

Mir ist klar, dass ich manuell ein Format auswählen kann, das dateFolgendes versteht:

$ date -d "@$(date +%s)"
Fri 29 Jan 22:08:03 GMT 2016

Mich interessiert aber, warum es ein Format ausgibt, das es nicht wieder akzeptiert.

Antwort1

Ich habe gerade etwa zwei Stunden damit verbracht, nach dieser Antwort zu suchen, die mich seit Jahren nervt, und ich habe sie endlich gefunden!!

Standardmäßig datewird ein Datum im aktuellen Gebietsschemaformat ausgegeben, z. B. en_GB.UTF-8oder en_AU.UTF-8oder de_DE.UTF-8usw.

Ihr Standardgebietsschema ähnelt meinem und zeigt Datumsangaben im folgenden Format an:

date_fmt "%a %e %b %H:%M:%S %Z %Y"

Leider ist dies eines der wenigen Formate, die der Datumsbefehl nicht versteht. Wenn jedochKann verstehenein sehr ähnliches Format

date_fmt "%a %e %b %Y %H:%M:%S %Z"

"Fr 29 Jan 2016 22:04:26 GMT" Funktioniert

"Fri 29 Jan 22:04:26 GMT 2016" Nicht

Warum die sehr häufig verwendeten Gebietsschemas en_GB.UTF-8 und en_AU.UTF-8 ein Format verwenden, das datenicht gelesen werden kann, weiß ich nicht, aber es ist sehr einfach, es so zu optimieren, dass es Sie nicht mehr stört, zumindest nicht, bis Sie Ihr System neu installieren oder Ihre Definitionen durch ein übereifriges Update überschrieben werden >:-(

So passen Sie das Datumsformat Ihrer Region in drei Schritten an

Ich habe die folgenden Informationen gefundenHier:

1. Überprüfen Sie, welches Gebietsschema Sie verwenden

Überprüfen Sie zunächst, welches Gebietsschema Ihr System für das Zeit- und Datumsformat verwendet

$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY=en_AU.UTF-8
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8
LC_ALL=

Beachten Sie dasLC_TIME=Eintrag. Meiner ist Englisch-Australisch:en_AU.UTF-8Ihre könnte en_GB_UTF-8 sein

2. Bearbeiten Sie die Gebietsschemadefinition

Öffnen Sie ein Terminal und bearbeiten Sie die entsprechende Gebietsschemadefinition

$ sudo nano /usr/share/i18n/locales/{LC_Time}

z.B

$ sudo nano /usr/share/i18n/locales/en_AU

Scrollen Sie nach unten zum Abschnitt LC_TIME, hier ist meiner:

LC_TIME
abday       "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day         "Sunday";/
            "Monday";/
            "Tuesday";/
            "Wednesday";/
            "Thursday";/
            "Friday";/
            "Saturday"
abmon       "Jan";"Feb";/
            "Mar";"Apr";/
            "May";"Jun";/
            "Jul";"Aug";/
            "Sep";"Oct";/
            "Nov";"Dec"
mon         "January";/
            "February";/
            "March";/
            "April";/
            "May";/
            "June";/
            "July";/
            "August";/
            "September";/
            "October";/
            "November";/
            "December"
d_t_fmt     "%a %d %b %Y %T %Z"
d_fmt       "%d//%m//%y"
t_fmt       "%T"
am_pm       "AM";"PM"
t_fmt_ampm  "%I:%M:%S %p"
date_fmt    "%a %e %b %Y %H:%M:%S %Z"
week 7;19971130;1
END LC_TIME

date_fmtSie müssen lediglich den Eintrag ändern

Ich habe meins geändert von: date_fmt "%a %e %b %H:%M:%S %Z %Y"indate_fmt "%a %e %b %Y %H:%M:%S %Z"

Speichern Sie die Datei und beenden Sie den Editor

3 Regenerieren Sie Ihr Gebietsschema

Sie kompilieren Ihre Gebietsschemadefinitionsdateien neu mit:

$ sudo locale-gen

Das ist es! Jetzt datesollte der Befehl standardmäßig eine Ausgabe in einem Format ausgeben, das er selbst nativ als Eingabe akzeptieren kann.

$ date -d "$(date)"
Mon 17 Aug 2020 17:58:37 AWST

verwandte Informationen