Collin Funk wrote:

> $ LC_ALL=fa_IR.UTF-8 date +%a

I guess it's easier with %A than %a, because with the abbreviated weekday
names there may be some ambiguity between the chosen language and Engligh,
that does not exist when considering full weekday names.

Paul Eggert wrote:
> Date formats themselves depend on the 
> language. Hard to believe that a language-independent parser could deal 
> with them all.

It's a finite number of such date formats:

$ cd glibc/localedata/locales/
$ grep -h ^d_t_fmt * | sed -e 's/^d_t_fmt[     ]*//' | LC_ALL=C sort -u
"#%Y)#%m)#%d tenpo %T"
"%A %Y %B %d %T"
"%A %d %B %Y %H:%M:%S"
"%A %d %B %Y %I:%M:%S %p"
"%A %d %B %Y %T %Z"
"%A %d %B %Y %p %I:%M:%S"
"%A %d %b %Y %H:%M:%S"
"%A %d %b %Y %I:%M:%S %p"
"%A %d %b %Y, %I:%M:%S %p"
"%A %d %b/
"%A %e %B %Y %k:%M:%S"
"%A د %Y د %B %e، %H:%M:%S"
"%A ថ្ងៃ %e ខែ %B ឆ្នាំ %Y, %H ម៉ោ %M នាទី %S វិនាទី​"
"%A, %-d %B de %Y, %T"
"%A, %B %d, %Y %p%I:%M:%S"
"%A, %B %e, %Y %X %Z"
"%A, %B %e, %Y %r %Z"
"%A, %Y. gada %e. %B, %H:%M:%S"
"%A, %Y. goda %e. %B, plkst. %H : %M"
"%A, %Yʼ %B %-dʼ лун %T"
"%A, %d %B %Y %T"
"%A, %d %B Năm %Y %T %Z"
"%A, %d %B, %Y %I:%M:%S %p"
"%A, %d ta %b, %Y %H:%M:%S"
"%A, %d. %B %Y. %T %Z"
"%A፡ %B %e መዓልቲ %Y %r %Z"
"%A፡ %B %e ዮም %Y %r %Z"
"%A፡ %B %e ግርጋ %Y %r %Z"
"%A፣ %B %e መዓልቲ %Y %r %Z"
"%A፣ %B %e ቀን %Y %r %Z"
"%A፣ %B %e ጋላሳ %Y %r %Z"
"%A፥%B፡%e፡መዓልት፡%Y፡%r፡%Z"
"%B %d %A %Y %p%I.%M.%S"
"%F %T"
"%H:%M:%S %Y %b %d %a"
"%OC%Oy %b %Od %A %OI:%OM:%OS %Op %Z"
"%OC%Oy %b %Od %A %OI:%OM:%OS %p"
"%OC%Oy年%B%Od日 (%A) %OH時%OM分%OS秒"
"%Oe %B %Oy %OI:%OM:%OS %p"
"%T, %d %B, %Y yil, %A"
"%T, %d %B, %Y йил, %A"
"%Y %B %d %I:%M:%S %p"
"%Y %b %d (%a) %H:%M:%S %Z"
"%Y %b %d, %a %T"
"%Y %d %b %a %T"
"%Y m. %B %d d. %T"
"%Y ашықәс %d %B, %T"
"%Y წლის %d %B, %T"
"%Y-%m-%d %H:%M:%S %z"
"%Y-%m-%dT%T %Z"
"%Y-%m-%dT%T%:z"
"%Y. %b. %-e., %A, %H:%M:%S %Z"
"%Y年%m月%d日 %A %H:%M:%S"
"%Y年%m月%d日 %A %H时%M分%S秒"
"%Y年%m月%d日 %A %H點%M分%S秒"
"%Y年%m月%d日 %H时%M分%S秒"
"%Y年%m月%d日 %H時%M分%S秒"
"%Y年%m月%d日 (%A) %H點%M分%S秒"
"%Y年%m月%d號 (%A) %H點%M分%S秒"
"%a %-d %b %Y %I:%M:%S.%p"
"%a %-d %b %Y, %T"
"%a %-e %b %Y %T %Z"
"%a %Y %b %d %T (%Z)"
"%a %Y %b %d %T"
"%a %b %d %Y %T"
"%a %b %e %H:%M:%S %Y"
"%a %d %b %Y %R"
"%a %d %b %Y %T %Z"
"%a %d %b %Y %T %z"
"%a %d %b %Y %T"
"%a %d %b %Y %r %Z"
"%a %d %b %Y %r"
"%a %d. %b %Y %T %Z"
"%a %d. %b %Y %T"
"%a %d. %b %Y kl. %H.%M %z"
"%a %e %b %Ey, %H:%M:%S"
"%a %e %b %Y %H:%M:%S"
"%a %e. %B %Y %H.%M.%S"
"%a %e. %Bta %Y %H.%M.%S"
"%a %e.%b %Y, %T"
"%a, %-d %b %Y, %T"
"%a, %b %e. b. %Y %T %Z"
"%a, %d %b %Y %T %Z"
"%a, %d, %b %Y %T"
"%a, %d-%b-%Y %X %z"
"%a %-d. %B %Y, %H:%M:%S"
"%a %e. %B %Y, %H:%M:%S"
"%a، %d-%m-%Y، %T"
"%d %b, %Y %H:%M:%S"
"%d %b, %Y %I:%M:%S %p"
"%d.%m.%Y %T"
"%e %B %Y %I:%M:%S %p"
"%e %B, %Y %I.%M.%S %p"
"%x (%a) %X"
"%x (%a) %r"
"%y-%m-%d %T"
"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
"Dydd %A %d mis %B %Y %T %Z"
"Dʼar %A %d a viz %B %Y %T"
"Li %A %d %B %Y %T"
"Te %A, te %d o %B, %Y %T"
"ranar %A, %d ga %B cikin %r"
"و %H:%M:%S ت %d %B %Y"
"སྤྱི་ལོ%y/
"ọjọ́ %a, %d oṣù %b ọdún %Y %T"
"‫%A %Oe %B %Oy، %OH:%OM:%OS‬"
"西元%Y年%m月%d日 (%A) %H時/

And, for a given language, only one of them applies (or, actually, three:
d_t_fmt, d_fmt, and t_fmt).

So, I think it can be done
  - by adding a small number of new rules (10-20 probably),
  - having the locale tied into the lexer
    
<https://www.gnu.org/software/bison/manual/html_node/Lexical-Tie_002dins.html>,
but it will be a lot of work. Also, to extend the test suite with a reasonable
amount of test cases for each of the more than 300 locales.
Fortunately, this work can be done one locale at a time. Pick the 10 most
important locales, and you have already covered the needs of 30% of the users.

Bruno




Reply via email to