Consultez le code suivant:Comment supprimer DateTime.Parse dépendance à l'égard System.Threading.Thread.CurrentThread.CurrentCulture
class Program
{
static void Main(string[] args)
{
try
{
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fo-FO");
var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
var d = DateTime.Parse(s, CultureInfo.InvariantCulture);
Console.WriteLine("Was able to parse with fo-FO");
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
try
{
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ");
var d = DateTime.Parse(s, CultureInfo.InvariantCulture);
Console.WriteLine("Was able to parse with en-US");
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
}
}
La sortie est:
Exception: System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.DateTime.Parse(String s, IFormatProvider provider)
at DateTimeTest2.Program.Main(String[] args) in C:\Projects\DateTimeTest2\DateTimeTest2\Program.cs:line 17
Was able to parse with en-US
Ce fragment de code prouve que DateTime. Parse utilise Thread.CurrentThread.CurrentCulture sans tenir compte du fait que la "InvariantCulture" est passée. Je trouve cela si peu intuitif que je le considère comme un "bug". Pourquoi devons-nous passer dans un CultureInfo si en fait il est ignoré par DateTime.Parse dans tous les cas? Y at-il un moyen d'appeler DateTime.Parse d'une manière qui est indépendante de la CurrentCulture?
Vous appelez 'DateTime.MaxValue.ToString' sans culture - êtes-vous Assurez-vous que cette chaîne est correctement formatée? (Je ne sais pas comment fo-FO met en forme ses chaînes de date ...) –
J'ai une exception dans les deux cas. Quel cadre de version avez-vous utilisé? –
@Adam Qu'est-ce qui fonctionne: la culture invariante peut analyser une chaîne produite par en-US. Cependant, la culture invariante ne peut pas analyser une chaîne produite par fo-FO. –