Я пытаюсь создать приложение, которое запускает некоторый код при открытии финансовых рынков. В основном в псевдокоде:
if(9:30AM ET < Time.Now < 4:00PM ET) {//do something}
Есть ли способ сделать это с помощью объекта DateTime в С#?
Ответ 1
Попробуйте следующее:
var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
Ответ 2
Возможно, вы использовали метод ConvertTimeTimeZoneInfo, чтобы преобразовать данный DateTime в восточный часовой пояс и выполнить сравнение там.
var timeToConvert = //whereever you're getting the time from
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
Ответ 3
Вам нужно разделить логику на две части:
Убедитесь, что дата больше даты начала, startTime > now
Убедитесь, что дата меньше даты окончания, endTime < now
Для диапазона дат логика должна удовлетворять обоим (с логическим И, &&).
DateTime startTime = DateTime.Today.AddHours(9).AddMinutes(30);
DateTime endTime = DateTime.Today.AddHours(12+4);
DateTime now = DateTime.Now;
if(startTime > now && endTime < now) {
// do something
}
Если вы находитесь в часовом поясе ET, он должен работать нормально, но в противном случае вам нужно сделать некоторые манипуляции с часовым поясом. Проверьте другие ответы.