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

Hannes

Client
Регистрация
03.02.2016
Сообщения
527
Благодарностей
273
Баллы
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
 

Вложения

volody00

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

Hannes

Client
Регистрация
03.02.2016
Сообщения
527
Благодарностей
273
Баллы
63
@volody00, Спасибо за отклик!

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

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

Проблема в том, что код заточен под другой часовой пояс.
Если можешь взяться и помочь подправить код, рад буду оплатить работу.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
первый кубик не запускай и всё должно работать. положи в переменную "date_of_last_work" время, которое получаешь с сервера. и запускай второй и третий кубик.
 
  • Спасибо
Реакции: Hannes

Hannes

Client
Регистрация
03.02.2016
Сообщения
527
Благодарностей
273
Баллы
63
Не понял, почему первый кубик не запускать.

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

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
в 1-м кубике попробуй оставить:
C#:
DateTime CurrentTime = DateTime.Now;

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

return 1;
 
  • Спасибо
Реакции: Hannes

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
  • Спасибо
Реакции: Hannes

Ndorennu

Новичок
Регистрация
01.08.2021
Сообщения
8
Благодарностей
0
Баллы
1
Разве их можно сравнивать?
 

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