Я действительно рисую пробел на этом. Я работал над глобализацией, но DateTime, кажется, всегда возвращается к культуре CurrentThread. Я разбил это на более мелкие шаги, надеясь найти мою проблему, но это начинает сводить меня с ума.
У меня есть текстовое поле с датой в виде строки:
// the CurrentThread's culture is de-DE
// My test browser is also set to de-DE
IFormatProvider culture = new System.Globalization.CultureInfo("de-DE",
true);
// en-US culture, what I'd ultimately like to see the DateTime in
IFormatProvider us_culture = new System.Globalization.CultureInfo("en-US",
true);
// correctly reads the textbox value (22.7.2010 into a datetime)
DateTime dt= DateTime.Parse(txtStartDate.Text, culture,
System.Globalization.DateTimeStyles.NoCurrentDateDefault);
// correctly produces a string 7/22/2010
string dt2 = dt.ToString(us_culture);
На данный момент я хочу DateTime, который находится в en-US
Я пробовал оба:
DateTime dt3 = Convert.ToDateTime(dt2, us_culture);
DateTime dt3 = DateTime.Parse(dt2, us_culture);
Но оба производят de-DE DateTimes. Моя мотивация при задании этого вопроса заключается в том, что остальная часть бизнес-логики будет вызывать dt2.toString () и приведет к неправильной строке даты и времени. Я понимаю, что мог бы изменить toString () на toString (us_culture), но я бы предпочел не изменять всю остальную бизнес-логику, чтобы учесть это изменение.
Есть ли способ получить DateTime в культуре, отличной от культуры CurrentThread?
Спасибо, что уделили мне время, я слишком долго бился об это.