Bonjour à tous,

Devant migrer une application développée par un tiers de Windows vers Android, je viens d'être piégé par le cas suivant :

Le code ci-dessous semble être indépendant de l'OS cible mais donne en réalité 2 résultats différents sous Windows et Android. À un endroit de l'application, le codeur a voulu afficher une variable TDate selon le format défini par les paramètres régionaux de l'appareil (un "10/11/2012" français devenant par exemple un "10.11.2012" suisse) dans un label. Dans une autre partie de son code, il a repris la valeur affichée par le label pour en refaire un TDate.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
DateTimeToString(str,FormatSettings.ShortDateFormat, EncodeDate(myYear,myMonth,MyDay));
Label1.text:=str;
 
...
 
RefDate:=StrToDate(Label1.text);
Sous Windows, une date "10/11/1900" est affichée dans le label comme "10/11/1900" et le StrToDate redonne une date "10/11/1900".
Mais sous Android, on a... une date "10/11/1900" qui est affichée dans le label comme "10/11/00" et le StrToDate redonne une date "10/11/2000" !!!!!!!!!!!!!!!!!!!!!!


On a donc un "DateTimeToString(str,FormatSettings.ShortDateFormat..." qui indique l'année sur 4 caractères sous Windows et seulement sur 2 sous Android en perdant dans le cas précis l'information du siècle.


Est-ce que quelqu'un a une explication sur ce comportement différent et est-ce qu'il y a une solution simple pour forcer sous Android l'indication de l'année avec 4 caractères sans qu'il me soit nécessaire de revoir tout le traitement des dates de ce gentil codeur "windowien" ?