.NET : Exception avec DateTime.Now : TimeZoneNotFoundException

Récemment, deux joueurs m’ont remonté des problèmes dans Pictopix qui sont liés à DateTime.Now(). Lorsque cette méthode est appelée au début du jeu, il y a cette exception :

TimeZoneNotFoundException: Exception of type ‹ System.TimeZoneNotFoundException › was thrown.
at System.TimeZoneInfo.FindSystemTimeZoneById (System.String id) [0x00039] in :0
at System.TimeZoneInfo.CreateLocal () [0x00053] in :0
at System.TimeZoneInfo.get_Local () [0x00009] in :0
at System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc (System.DateTime time, System.Boolean& isAmbiguousLocalDst) [0x00000] in :0
at System.DateTime.get_Now () [0x00008] in :0

Ce qui est étrange, c’est qu’ils possèdent le jeu depuis longtemps et n’ont jamais eu de problèmes jusque-là. Je leur ai envoyé une petite appli pour essayer de mieux cerner le problème, mais pour le moment, je n’ai pas eu de réponses. Ils ne sont pas très loquaces :confused: (l’un est chinois)

Je précise que je n’ai pas retouché au code depuis septembre 2020. Je me demande donc ce qui pourrait empêcher le jeu d’accéder à la Time Zone.

Je suppose que c’est du Unity? Apparemment ils ont corrigés un bug qui y ressemble ( et ). En cherchant j’ai vu un bug similaire chez un joueur Chinois de KSP.

1 « J'aime »

Oui, j’aurais du préciser :slight_smile:

Merci pour les liens. Mon build actuel est fait sous Unity 2018.3.13f1. Il n’est pas listé dans les versions concernant. Dès que j’ai le temps, je vais suivre les instructions pour reproduire le problème pour m’en assurer. Puis à changer de version de Unity en espérant que ça ne pète pas autre chose.

Je confirme : c’était bien lié à ça. En changeant la clé dans la base de registre, j’avais bien la même erreur que les joueurs.

Du coup, je suis passé à une autre version de Unity où le pb est résolu. Je suis bon pour retester le jeu de fond en comble pour m’assurer qu’il n’y a pas de bugs :confused:

Je suis sûr que les deux avis négatifs chinois que j’ai eu sur Steam dernièrement sont liés à ça.

1 « J'aime »

Et garder ta version actuelle mais avec un patch pour remettre la clé de registre correctement?

Etant donné qu’après avoir téléchargé deux versions de Unity j’ai de nouveaux bugs, c’est peut-être ce que je vais devoir faire :man_shrugging:

Mais à ma connaissance, il n’est pas possible de modifier la base de registre depuis Unity. Ou lancer un .reg en douce… mais je n’aime pas trop ça. Surtout si la valeur est correcte et que c’est l’API qui merde pour la lecture.

Je vais essayer d’autres versions de Unity.

Finalement, je suis resté sur la version d’Unity avec laquelle je compile habituellement Pictopix et au moment où j’intercepte l’exception, j’invite le joueur à télécharger un fichier .reg pour mettre à jour la clé en base de registre. Avec la liste de toutes les Time Zone acceptées en commentaire.

Le problème ne semble concerner que des chinois. Dans leur cas, la valeur de la clé est vide. C’est soit un bug windows ou alors c’est une application tierce qui modifie la clé.

1 « J'aime »

ils disent tous ca!!! « je n’ai rien fait de spécial! » et quand tu creuses, tu trouve toujours un truc!
on vous connait les devs
:slight_smile: :slight_smile: :slight_smile:

1 « J'aime »

C’est drôle, j’aurai dit la même chose des utilisateurs :grinning_face_with_smiling_eyes:

Ou un bug dans l’implé de mono.

1 « J'aime »