Как конвертировать DateTime в восточное время - PullRequest
49 голосов
/ 14 мая 2011

Я пытаюсь создать приложение, которое запускает некоторый код, когда финансовые рынки открыты.В основном в псевдокоде:

if(9:30AM ET < Time.Now < 4:00PM ET) {//do something}

Есть ли способ сделать это с помощью объекта DateTime в C #?

Ответы [ 3 ]

116 голосов
/ 14 мая 2011

Попробуйте это:

var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
7 голосов
/ 14 мая 2011

Возможно, вы могли бы использовать метод ConvertTime класса TimeZoneInfo , чтобы преобразовать данный DateTime в восточный часовой пояс и выполнить сравнение оттуда.

var timeToConvert = //whereever you're getting the time from
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
0 голосов
/ 14 мая 2011

Вам нужно разделить логику на две части;

  • Проверьте, больше ли дата, чем дата начала, 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, он должен работать нормально, но в противном случае вам нужно выполнить некоторые манипуляции с часовым поясом. Проверьте другие ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...