Используйте определенный часовой пояс вместо timeone сервера хостинга

#c# #asp.net

#c# #asp.net

Вопрос:

   DateTime serverTime = DateTime.Now;
            DateTime servereDate = DateTime.Today;
            DateTimeOffset localTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(serverTime, TimeZoneInfo.Local.Id, "Singapore Standard Time");
            DateTimeOffset localTime1 = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(servereDate, TimeZoneInfo.Local.Id, "Singapore Standard Time");
  if (localTime1.Date >= eddate.Date amp;amp; localTime1.Date <= stdate.Date)
            {
                if (localTime >= sttime amp;amp; localTime <= edtime)
                {

                    MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
                    MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
                    MySqlDataReader MyReader2;
                    MyConn2.Open();
                    MyReader2 = MyCommand2.ExecuteReader();
                    Label2.Text = "Thank you for You Vote";
                  //  System.Diagnostics.Debug.WriteLine();
                }
                else
                {
                    Label2.Text = "Please check the eletion time!";
                    Label2.ForeColor = System.Drawing.Color.Green;
                }
            }
            else
            {
                Label2.Text = "Please check the eletion date!";
                Label2.ForeColor = System.Drawing.Color.Blue;
            }
  

Я пытаюсь получить дату в указанном мной часовом поясе (стандартное время Сингапура) и сравнить ее с датой, отображаемой в gridview. Я могу использовать стандартное время Сингапура при проверке времени. Однако для даты он по-прежнему не может получить дату по стандартному времени Сингапура.

Комментарии:

1. Обычно можно сохранить время в UTC и использовать DateTime.UtcNow вместо DateTime.Now . Тогда вы не зависите ни от какого часового пояса. Если вам нужно использовать часовые пояса, используйте DateTimeOffset вместо DateTime .

2. Вы всегда должны запускать свои серверы баз данных в универсальном времени, что значительно экономит время при добавлении временных меток на сервер. Значения, которые возвращаются с сервера, должны содержать смещение для его часового пояса, использование приведенного ниже примера должно позволить вам сравнивать яблоки с яблоками

3. Привет, я пытаюсь установить конкретный часовой пояс на стороне моего приложения. Мне удалось получить текущее время для определенного часового пояса, однако для даты я не могу получить правильную дату в текущем часовом поясе.

Ответ №1:

Вы можете перевести даты в универсальное время для сравнения;

         DateTime time = DateTime.Today.ToUniversalTime();
        DateTime time2 = DateTime.Now.ToUniversalTime();

        Console.WriteLine(time.ToString());
        Console.WriteLine(time2.ToString());
  

Дата-время.Сегодня вернет начало дня по вашему местному времени, затем преобразует его в UTC, дату и время.Теперь вернет текущее время и преобразует его в UTC, эти значения будут равны только ровно в полночь.

Вы не включили код, в котором вы получаете eddate и stdate, но добавляете .Функция ToUniversalTime() должна сделать свое дело.

Если вы хотите, чтобы все было по местному времени, вы можете использовать .ToLocalTime()

Комментарии:

1. Почему не просто DateTime.UtcNow ?

2. Вы можете использовать DateTime . UtcNow для текущего времени все еще требуется DateTime. Сегодня. ToUniversalTime() для начала дня. Для значений, возвращаемых с сервера, потребуется . ToUniversalTime(), если они возвращаются в другом часовом поясе

3. Но DateTime.Today.ToUniversalTime() это начало дня только для местного часового пояса (выраженного в UTC). Универсального «начала дня» не существует.

4. Верно, начало дня должно быть с точки зрения пользователей или с точки зрения UTC.. например, ребята в моем офисе хотят знать, что поступило сегодня, с их точки зрения, сегодняшний день начинается в полночь по местному времени, для глобальной системы торгов я бы использовал полночь UTC, чтобы у нас была фиксированная точка отсчета для всех.

5. Лучшее решение — сделать так, чтобы все сохранялось в UTC, когда пользователь делает запрос в свое местное время, вы преобразуете запрос в UTC, выполняете поиск, затем преобразуете даты в результатах обратно в местное время пользователей, чтобы отобразить им результаты.

Ответ №2:

Получите смещение часового пояса клиента от UTC в минутах с помощью JavaScript, если это возможно, и обработайте смещение с помощью класса TimeZoneInfo.

Это локальный часовой пояс компьютера, на котором выполняется код. В ASP.Сетевое приложение, код выполняется на сервере — так что это часовой пояс, который он вернет. Вот почему ToLocalTime() , ToUniversalTime() не принесут вам ожидаемых результатов.

Комментарии:

1. Привет, я использую ToLocalTime(), но он все еще использует часовой пояс сервера. Есть идеи о том, как использовать местный часовой пояс? Я хотел бы указать, что местное время — это часовой пояс MYT, который равен UTC 8

2. ToLocalTime() вам не поможет, так как все равно потребуется местное время сервера. Лучшее решение — на стороне клиента или на стороне сервера, упомянутой Ксавье в комментариях.

3. Привет, я пытаюсь установить конкретный часовой пояс на стороне моего приложения. Мне удалось получить текущее время для определенного часового пояса, однако для даты я не могу получить правильную дату в текущем часовом поясе.