#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. Привет, я пытаюсь установить конкретный часовой пояс на стороне моего приложения. Мне удалось получить текущее время для определенного часового пояса, однако для даты я не могу получить правильную дату в текущем часовом поясе.