Manpreet89 Ответов: 1

Проблема преобразования даты и времени при переводе с тайского на английский


У меня есть приложение, в котором пользователи могут выбрать язык, и текущая культура будет установлена для этого языка. Я сталкиваюсь с проблемами, когда пользователи выбирают тайский язык. Поскольку тайский календарь опережает грузинский на 543 года, дата показывает 2017 год+543. Это прекрасно. Но проблема в том, что когда я пытаюсь перевести дату из тайской культуры в английскую, она каким-то образом добавляет еще 543 года. Значит в настоящее время это 2017+543 = 2560. Это добавляет еще 543 года 2560 + 543= 3103- Кто-нибудь может мне помочь, пожалуйста. Пожалуйста, обратите внимание, что CurrentThread.CurrentCulture будет тайский. Вот фрагмент кода

Что я уже пробовал:

DateTime dt = DateTime.Now;
String format = "MM/dd/yyyy hh:mm:ss";

System.Globalization.CultureInfo us = new System.Globalization.CultureInfo("en-US");
IFormatProvider culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
String strDate = dt.ToString(format);

DateTime serverSysdate = DateTime.ParseExact(strDate, "MM/dd/yyyy hh:mm:ss", culture);

1 Ответов

Рейтинг:
1

Maciej Los

Неправильный подход!

Вы не должны преобразовывать дату в строку, а затем в дату! Вы должны работать на свиданиях!
Представьте себе, время в мире отличается между часовыми поясами!

Для получения более подробной информации, пожалуйста, смотрите:
Работа с календарями[^]
Выполнение арифметических операций с датами и временем[^]
Как использовать часовые пояса в арифметике дат и времени[^]
Преобразование между DateTime и DateTimeOffset[^]
Преобразование Времени Между Часовыми Поясами[^]
Как: разрешить неоднозначные времена[^]
Как: пусть пользователи разрешают неоднозначные времена[^]

Пример:

// Get time in local time zone 
 DateTime thisTime = DateTime.Now;
 Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                   TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
 Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
 // Get GTB Standard Time zone - (GMT+02:00) Athens, Istanbul, Minsk
 TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("GTB Standard Time");
 DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);      
 Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
                   tst.DaylightName : tst.StandardName, tstTime);
 Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));


Manpreet89

Спасибо за Ваш ответ. Но мне нужно понять, что именно здесь происходит не так. Почему 543 года добавляются при преобразовании в английскую культуру, когда нынешняя культура уже тайская? Разве не должно быть -543 года?

Maciej Los

Я уже говорил тебе. Это из-за преобразования между строкой и датой-временем!