Как сравнить дату и время в разных часовых поясах?

  • Автор темы Автор темы Hannes
  • Дата начала Дата начала

Hannes

Client
Регистрация
03.02.2016
Сообщения
554
Реакции
284
Баллы
63
Здравствуйте!

Можете, пожалуйста, подсказать, как подправить скрипт сравнения
прошло ли заданное количество часов от дата и время
для чека даты с измененным часовым поясом GMT-4?

C#:
Развернуть Свернуть Копировать
var datetime_start = project.Variables["date_of_last_work"].Value;
var datetime_utc = DateTime.Parse(datetime_start).ToUniversalTime();
double hours = double.Parse(project.Variables["inputs_hours"].Value); //сколько часов должно пройти от даты в переменной
bool time_comparison = datetime_utc.AddHours(hours) < DateTime.UtcNow;
if (time_comparison)
{
    return hours+" часа прошло с "+datetime_start;;
}
else
{
    //return hours+" часа не прошло с "+datetime_start;
    //если надо по false выйти:
    throw new Exception (hours+" час(ов) не прошло c "+datetime_start);
}

Если подставить дату в GMT-4, то сравнение идёт с UtcNow и сравнение получается не корректным (разные часовые пояса).
Как подправить код, что бы сравнение шло в одинаковых часовых поясах?
Шаблон прицепил.

ZENNODATE.png
 

Вложения

почему не корректно то? на 2-й строчке ты дату из переменной "date_of_last_work" приводишь в utc , а на 4 сравниваешь с utc. Вроде всё верно там работает. В 1-м кубике я только не понял зачем ты минус 360 минут делаешь. Но в итоге сравнение получается корректным (на мой взгляд)
 
  • Спасибо
Реакции: Hannes
@volody00, Спасибо за отклик!

В 1-м кубике я только не понял зачем ты минус 360 минут делаешь.
Получаю время в GMT-4.

Задача такова у меня:
Есть переменная с датой и временем в часовом поясе GMT-4 (США, Вашингтон).
Мне нужно взять значение этой переменной и проверить, прошло ли 2 часа.

Проблема в том, что код заточен под другой часовой пояс.
Если можешь взяться и помочь подправить код, рад буду оплатить работу.
 
первый кубик не запускай и всё должно работать. положи в переменную "date_of_last_work" время, которое получаешь с сервера. и запускай второй и третий кубик.
 
  • Спасибо
Реакции: Hannes
Не понял, почему первый кубик не запускать.

Получаю первым кубиком дату и время в GMT-4 "05.08.2021 11:13:48" (по Москве это 05.08.2021 17:13:48 ). Помещаю в переменную "date_of_last_work".
Запускаю второй и третий кубик, получаю результат "2 часа прошло с 05.08.2021 11:09:52"

Ну неверно же работает! Скрипт сравнивает время в переменной "date_of_last_work", как если бы там было Московское время. Но часовой пояс то другой.
 
в 1-м кубике попробуй оставить:
C#:
Развернуть Свернуть Копировать
DateTime CurrentTime = DateTime.Now;

project.Variables["date_of_last_work"].Value = CurrentTime.ToString();

return 1;
 
  • Спасибо
Реакции: Hannes
  • Спасибо
Реакции: Hannes
Разве их можно сравнивать?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)