У меня не получается создать объект DateTime, в котором хранится дата 29.02.101 (тайваньская дата) в C# без изменения культуры потока.
Когда я делаю это:
DateTime date = new DateTime(2012, 2, 29, new TaiwanCalendar());
Он создает объект DateTime с датой 1911 года в будущем. Кажется, эта перегрузка предназначена для того, чтобы сообщить объекту DateTime, что вы предоставляете дату Тайваня, а не хотите, чтобы дата Тайваня.
я могу сделать это
DateTime leapDay = new DateTime(2012, 2, 29);
string date = string.Format("{0}/{1}/{2}", new TaiwanCalendar().GetYear(leapDay), new TaiwanCalendar().GetMonth(leapDay), new TaiwanCalendar().GetDayOfMonth(leapDay));
но это строковое представление, и моему вызывающему коду требуется возвращаемый объект DateTime, и это:
DateTime leapDay = new DateTime(2012, 2, 29);
DateTime date = new DateTime(new TaiwanCalendar().GetYear(leapDay), new TaiwanCalendar().GetMonth(leapDay), new TaiwanCalendar().GetDayOfMonth(leapDay));
не работает (я получаю сообщение об ошибке «Параметры года, месяца и дня описывают непредставимое значение DateTime».).
Мне нужен объект DateTime, который может точно представлять тайваньскую дату без изменения культуры потока. Это работает:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-TW");
Thread.CurrentThread.CurrentCulture.DateTimeFormat.Calendar = new TaiwanCalendar();
DateTime date = new DateTime(2012, 2, 29);
но как только я верну культуру потока обратно на en-US, дата изменится автоматически, что не позволит мне вернуть ее как тайваньскую дату.
Есть ли способ сделать это, или мне придется передать дату в виде строки?
calendar.ToDateTime(101, 2, 29, 0, 0, 0, 0)
(и есть еще одна перегрузка, где вы можете указатьera
) 13.03.2012DateTime
- просто он не знает, что это тайваньская дата, и вам нужно указать культуру для целей форматирования... но это < i>только для форматирования, которое имеет значение, верно? Для любых расчетов вы просто используете объект календаря напрямую. 13.03.2012