#c# #api
#c# #API
Вопрос:
У меня есть настольное приложение c #, которое использует API. Мой клиент из другого часового пояса. Итак, когда мы оба используем один и тот же API, мы получаем разное время даты, даже если дата в базе данных одинакова. Как я могу установить часовой пояс по умолчанию для своего приложения в коде c #, чтобы при доступе к нему из среды разработки я мог установить свой часовой пояс, а при развертывании его в рабочей среде я мог установить часовой пояс моего клиента? Я уже отладил и нашел .NET автоматически преобразует время, как только получает ответ от API, поэтому я ничего не могу сделать в потоке ответов.
Комментарии:
1. Сохраните формат UTC в базе данных и верните тот же формат, отобразите даты в клиенте в соответствии с культурным форматом клиента
2. @sujithkarivelil: Это не всегда правильно. Широко распространено мнение, что это «серебряная пуля», но если дата / время будут в будущем, вы вполне можете потерять информацию, в результате чего данные станут недействительными при изменении правил часового пояса. Смотрите codeblog.jonskeet.uk/2019/03/27 /…
3. В принципе, у нас недостаточно информации, чтобы ответить на этот вопрос, потому что это зависит от API. Как получить доступ к этому API? Есть ли у него поддержка часовых поясов? Пожалуйста, предоставьте дополнительную информацию.
4. Нет, в API нет никакой информации о часовом поясе. Это экономит время в базе данных в формате ‘2019-04-25 08:54:11’.
5. Возможно, только мы получаем часовой пояс клиента. Мы можем получить эту информацию из браузера клиента.
Ответ №1:
если дата-время меняется для вас и вашего клиента, это означает, что к дате-времени при его извлечении из API привязано значение смещения.
Итак, выполните проверку среды разработки в вашем приложении и извлеките дату и время UTC, используя свойство «UtcDateTime» типа DateTimeOffset и отобразите его в пользовательском интерфейсе, чтобы оно было одинаковым как для вас, так и для вашего клиента. В случае производственной среды просто продолжайте работать в обычном режиме.
if(IsDevEnvironment)
DateTimeToDisplay = ApiResponse.DateTimeInDB.UtcDateTime; // assuming DateTimeInDB is of DateTimeOffset type
else
DateTimeToDisplay = ApiResponse.DateTimeInDB
Ответ №2:
Вот способ установить часовой пояс, например, восточный часовой пояс.
TimeZoneInfo easternZone;
try { easternZone = TimeZoneInfo.FindSystemTimeZoneById("E. Africa Standard Time"); }
catch (TimeZoneNotFoundException) { easternZone = TimeZoneInfo.FindSystemTimeZoneById("Africa/Nairobi"); }
var timestamp = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, easternZone);
Комментарии:
1. Я понял ваш ответ, но проблема в том, что, как только мое приложение получает ответ, оно преобразует дату и время, а преобразованное время даты меньше или опережает на один день его фактическое значение. Итак, как я могу сообщить. СЕТЬ не позволяет автоматически преобразовывать дату и время?
2. Я отвечал на заголовок «Как установить часовой пояс», возможно, название вводит в заблуждение. Какой часовой пояс требуется для API?
Ответ №3:
попробуйте это ;
HAVING (Time BETWEEN DATEADD(d, - 1, GETUTCDATE()) AND GETUTCDATE())
это полезно для меня.
пример
ELECT Time, username, COUNT(username) AS CountOfusername
FROM dbo.tabl
GROUP BY Time, username
HAVING (Time BETWEEN DATEADD(d, - 1, GETUTCDATE()) AND GETUTCDATE())
Редактировать
DateTime hwTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "Arab Standard Time");
//DateTime hwTime = new DateTime();
try
{
TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Arab Standard Time");
Console.WriteLine("{0} {1} is {2} local time.",
hwTime,
hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName,
TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The registry does not define the Arab Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("Registry data on the Arab Standard Time zone has been corrupted.");
}
используйте этот код в своем приложении
Комментарии:
1. Не могли бы вы, пожалуйста, привести пример реализации?
2. @ThamaraiT проверьте сейчас