iso date format

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Oct 26 21:26:10 EEST 2006


On 2006-10-26 20:56, Thanos <pampo at freemail.gr> wrote:
>On 2006-10-26 20:33, Giorgos Keramidas wrote:
>> Μόνο που το "da_DK" είναι το locale της Δανίας.
>> 
>> Αν δεν ζεις μόνιμα εκεί, δε νομίζω να σου αρέσουν ιδιαίτερα
>> όλα τα άλλα που θα δεις με αυτό το locale.
> 
> Γι' αυτό και δεν το δοκίμασα! Υποψιάστηκα πως το LC_TIME δεν θα 
> επηρεάσει απλά την μορφή της ώρας αλλά και άλλα χαρακτηριστικά.

Αν αλλάξεις *μόνο* το LC_CTIME, κυρίως η μορφή της ώρας θα
επηρεαστεί από αυτό.  Μπορεί όμως, ανάλογα με το πώς είναι
ρυθμισμένα τα locale formats στο δικό σου σύστημα να επηρεαστούν
και πράγματα όπως:

    % env LC_ALL='el_GR.ISO8859-7' date '+%I:%m %p'
    09:10 μμ
    % env LC_ALL='da_DK.ISO8859-15' date '+%I:%m %p'
    09:10 pm
    %

Το ακριβές string που τυπώνεται όταν κάποιος `δείχνει' ώρες `προ
μεσημβρίας' και `μετά μεσημβρίας' είναι διαφορετικό σε κάθε χώρα
του κόσμου.

> Οπότε το ερώτημα παραμένει. Πως "λέω" στο σύστημα μου να έχει
> την μορφή YYYY-MM-DD HH:MM στην ημερομηνία/ώρα?

Δεν το λες `στο σύστημα'.  Το λες στην εφαρμογή σου.

Οι LC_XXX μεταβλητές επηρεάζουν τον τρόπο με τον οποίο δουλεύει η
strftime(3) κλήση της standard C library.  Αν εσύ ζητήσεις από
την strftime() την ώρα με format "%Y-%m-%d %H:%M:%S", θα σου
δείξει αυτό που θέλεις.  Αν τη ζητήσεις με άλλο format, θα σου
δείξει κάτι άλλο.

Αυτό που θέλεις δεν είναι θέμα ρύθμισης του `συστήματος', αλλά
θέμα παραμετροποίησης κ ρύθμισης της Χ εφαρμογής.

> Υπάρχει κάποια λίστα με τις πιθανές τιμές που μπορεί να πάρει η
> LC_TIME? Μήπως π.χ. μπορώ να δώσω κάτι σαν:
> 
> LC_TIME=YYYY-MM-DD HH:MM

Οχι, δεν παίζει έτσι.

> Ή δέχεται μόνο τιμές που δηλώνουν το locale και τα υπόλοιπα τα 
> αναλαμβάνει το locale?

Ναι.  Οι σωστές τιμές στο δικό μου σύστημα π.χ. είναι όσες
εμφανίζονται με:

    % locale -a | more

Το πώς και γιατί αυτές κανονίζουν τι θα φανεί όταν εσύ ζητήσεις
από την strftime() να σου δείξει την ημερομηνία ή την ώρα είναι
από πριν ορισμένο στα locale data files.  Αυτά τα data files στο
δικό μου σύστημα βρίσκονται με:

    % ls -ld /usr/share/locale/*

Για παράδειγμα, το binary αρχείο με τα LC_TIME δεδομένα/strings
εδώ περιέχει τα εξής:

    % ls -l /usr/share/locale/el_GR.ISO8859-7/LC_TIME 
    -r--r--r--  1 root  wheel  - 433 Oct 23 13:23 /usr/share/locale/el_GR.ISO8859-7/LC_TIME
    % hd /usr/share/locale/el_GR.ISO8859-7/LC_TIME 
    00000000  c9 e1 ed 0a d6 e5 e2 0a  cc e1 f1 0a c1 f0 f1 0a  |Ιαν.Φεβ.Μαρ.Απρ.|
    00000010  cc e1 fa 0a c9 ef ed 0a  c9 ef eb 0a c1 f5 e3 0a  |Μαϊ.Ιον.Ιολ.Αυγ.|
    00000020  d3 e5 f0 0a cf ea f4 0a  cd ef e5 0a c4 e5 ea 0a  |Σεπ.Οκτ.Νοε.Δεκ.|
    00000030  c9 e1 ed ef f5 e1 f1 df  ef f5 0a d6 e5 e2 f1 ef  |Ιανουαρίου.Φεβρο|
    00000040  f5 e1 f1 df ef f5 0a cc  e1 f1 f4 df ef f5 0a c1  |υαρίου.Μαρτίου.Α|
    00000050  f0 f1 e9 eb df ef f5 0a  cc e1 c0 ef f5 0a c9 ef  |πριλίου.Μαΐου.Ιο|
    00000060  f5 ed df ef f5 0a c9 ef  f5 eb df ef f5 0a c1 f5  |υνίου.Ιουλίου.Αυ|
    00000070  e3 ef fd f3 f4 ef f5 0a  d3 e5 f0 f4 e5 ec e2 f1  |γούστου.Σεπτεμβρ|
    00000080  df ef f5 0a cf ea f4 f9  e2 f1 df ef f5 0a cd ef  |ίου.Οκτωβρίου.Νο|
    00000090  e5 ec e2 f1 df ef f5 0a  c4 e5 ea e5 ec e2 f1 df  |εμβρίου.Δεκεμβρί|
    000000a0  ef f5 0a ca f5 f1 0a c4  e5 f5 0a d4 f1 e9 0a d4  |ου.Κυρ.Δευ.Τρι.Τ|
    000000b0  e5 f4 0a d0 e5 ec 0a d0  e1 f1 0a d3 e1 e2 0a ca  |ετ.Πεμ.Παρ.Σαβ.Κ|
    000000c0  f5 f1 e9 e1 ea de 0a c4  e5 f5 f4 dd f1 e1 0a d4  |υριακή.Δευτέρα.Τ|
    000000d0  f1 df f4 e7 0a d4 e5 f4  dc f1 f4 e7 0a d0 dd ec  |ρίτη.Τετάρτη.Πέμ|
    000000e0  f0 f4 e7 0a d0 e1 f1 e1  f3 ea e5 f5 de 0a d3 dc  |πτη.Παρασκευή.Σά|
    000000f0  e2 e2 e1 f4 ef 0a 25 48  3a 25 4d 3a 25 53 0a 25  |ββατο.%H:%M:%S.%|
    00000100  64 2f 25 6d 2f 25 59 0a  25 61 20 25 65 20 25 62  |d/%m/%Y.%a %e %b|
    00000110  20 25 58 20 25 59 0a f0  ec 0a ec ec 0a 25 61 20  | %X %Y.πμ.μμ.%a |
    00000120  25 65 20 25 62 20 25 59  20 25 58 20 25 5a 0a c9  |%e %b %Y %X %Z.Ι|
    00000130  e1 ed ef f5 dc f1 e9 ef  f2 0a d6 e5 e2 f1 ef f5  |ανουάριος.Φεβρου|
    00000140  dc f1 e9 ef f2 0a cc dc  f1 f4 e9 ef f2 0a c1 f0  |άριος.Μάρτιος.Απ|
    00000150  f1 df eb e9 ef f2 0a cc  dc fa ef f2 0a c9 ef fd  |ρίλιος.Μάϊος.Ιού|
    00000160  ed e9 ef f2 0a c9 ef fd  eb e9 ef f2 0a c1 fd e3  |νιος.Ιούλιος.Αύγ|
    00000170  ef f5 f3 f4 ef f2 0a d3  e5 f0 f4 dd ec e2 f1 e9  |ουστος.Σεπτέμβρι|
    00000180  ef f2 0a cf ea f4 fe e2  f1 e9 ef f2 0a cd ef dd  |ος.Οκτώβριος.Νοέ|
    00000190  ec e2 f1 e9 ef f2 0a c4  e5 ea dd ec e2 f1 e9 ef  |μβριος.Δεκέμβριο|
    000001a0  f2 0a 64 6d 0a 25 49 3a  25 4d 3a 25 53 20 25 70  |ς.dm.%I:%M:%S %p|
    000001b0  0a                                                |.|
    000001b1
    %

Αν κοιτάξεις προσεκτικά στα strings του `LC_TIME' αρχείου από τον
κατάλογο `/usr/share/locale/el_GR.ISO8859-7' θα δεις ότι κάπου
εκεί μέσα είναι ``κρυμμένα'' και πράγματα όπως ο προκαθορισμένος
τρόπος αναπαράστασης της ημερομηνίας (που για μας τους Έλληνες
είναι ``%d/%m/%Y'') κι ένα σωρό άλλα πράγματα.




More information about the Migrate2linux mailing list