2017-02-17 1 views
0

Я создаю приложение, которое сообщает мне, сколько времени осталось для открытия или закрытия рынка форекс.C# Как рассчитать предстоящее определенное время?

Image

Например, если в Нью-Йорке рынок только что близко, теперь я хочу знать, сколько времени осталось в Нью-Йорк на рынке, чтобы открыть снова. И некоторые идут на время закрытия, когда оно открыто.

Я могу использовать таймер для уменьшения оставшегося времени, но проблема в том, что я не могу получить абсолютное вычитаемое оставшееся значение времени. Даже с TimeSpan.Subtract или DateTime.Subtract.

EDIT: Я использую этот код, чтобы сказать мне, рынок открыт

if ((IsTimeOfDayBetween(DateTime.UtcNow, new TimeSpan(8, 0, 0), new TimeSpan(16, 0, 0))) == true) 
    { 
     textBox1.Background = new SolidColorBrush(Colors.Green); 

    } 

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

ответ

0

Вы можете попробовать что-то вроде этого, с помощью функции«IsTimeOfDayBetween»у вас уже есть:

// global variables 
    TimeSpan dayStart = new TimeSpan(0, 0, 0); 
    TimeSpan dayEnds = new TimeSpan(23, 59, 59); 

    // you have a timer(loop) every sencond, so you can have this two variables change depending on what market you are tracking, in this example NY 
    TimeSpan NyOpens = new TimeSpan(8, 0, 0); 
    TimeSpan NyClose = new TimeSpan(16, 0, 0); 

    // variable to store the result 
    TimeSpan tillOpenClose; 

    if ((IsTimeOfDayBetween(DateTime.UtcNow, NyOpens, NyClose)) == true) 
    { 
     textBox1.Background = new SolidColorBrush(Colors.Green); 
     // its open, you want time till close 
     // validate close time is greater than open time 
     if (NyClose.CompareTo(NyOpens) > 0) 
      tillOpenClose = NyClose.Subtract(DateTime.UtcNow.TimeOfDay); 
     else 
      tillOpenClose = ((dayEnds.Subtract(DateTime.UtcNow.AddSeconds(-1).TimeOfDay)).Add(NyClose)); // if the market closes at and earlier time, then the time till close, is the remaing time of this day, plus the time till close of the new day 
    } 
    else if ((IsTimeOfDayBetween(DateTime.UtcNow, dayStart, NyOpens)) == true) // if time is between start of day and open time 
     tillOpenClose = NyOpens.Subtract(DateTime.UtcNow.TimeOfDay); 
    else // it is between closetime and end of day 
     tillOpenClose = ((dayEnds.Subtract(DateTime.UtcNow.AddSeconds(-1).TimeOfDay)).Add(NyOpens)); // part remaining for this day plus new day, the extra second is to compensate the "dayEnds" 

    Console.WriteLine(tillOpenClose.ToString(@"hh\:mm\:ss")); 

И функция«IsTimeOfDayBetween»должно быть что-то вроде это:

if (open.CompareTo(close) > 0) // if open time is greater (e.g. open: (20,0,0) close: (4,0,0)) 
    { 
     if (timeNow.TimeOfDay.CompareTo(open) >= 0 || timeNow.TimeOfDay.CompareTo(close) <= 0) 
      return true; 
    } 
    else 
    { 
     if (timeNow.TimeOfDay.CompareTo(open) >= 0 && timeNow.TimeOfDay.CompareTo(close) <= 0) 
      return true; 
    } 

    return false; 

EDIT: Изменены время до закрытия, жаль что

EDIT2: скорректировано для времени закрытия до открытия времени

+0

Работаю как шарм. Спасибо ! – Suleman

+0

@ Сулейман, не проблема ... и извините, я только что отредактировал ответ снова, чтобы рассмотреть время закрытия в новый день. Надеюсь, что это именно то, что вам нужно – karkazz

-1

Пожалуйста, попробуйте ввести код. Я надеюсь, что это `ы помочь вашей проблемы

var dt = new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); 

    var now = System.DateTime.Now.ToUniversalTime(); 
    var future = new DateTime(2010, 1, 1).ToUniversalTime(); 

    Console.WriteLine((now - dt).TotalSeconds); 
    Console.WriteLine((future - dt).TotalSeconds); 
+0

Как это ответить на вопрос? – Enigmativity

Смежные вопросы