I'm trying to create an application that triggers some code when the financial markets are open. Basically in pseudo code:
if(9:30AM ET < Time.Now < 4:00PM ET) {//do something}
Is there a way I can do this using the DateTime object in C#?
Try this:
var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
You could probably use the ConvertTime method of the TimeZoneInfo class to convert a given DateTime to the Eastern timezone and do the comparison from there.
var timeToConvert = //whereever you're getting the time from
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
You can create an extension method for it,
NOTE: This is converting the current DateTime to EST
Like this,
using System;
using System.Runtime.InteropServices;
public static DateTime ConvertToEasternTime(this DateTime value)
{
TimeZoneInfo tz = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
: TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);
}
And you can use it like this,
EasternTime = DateTime.Now.ConvertToEasternTime(),
Just make sure you are importing the namespace to use this method.
NOTE: This below approach is converting the given DateTime to EST
private static TimeZoneInfo GetEasternTimeZoneInfo()
{
TimeZoneInfo tz = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
: TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
return tz;
}
This above method returns the EST TimeZone.
public static DateTime ConvertToEasternTime(DateTime date)
{
return TimeZoneInfo.ConvertTimeFromUtc(date, GetEasternTimeZoneInfo());
}
This above method returns the date that you passed in as a parameter to the EST time
To use the above method we can do,
var convertToEST= DateUtility.ConvertToEasternTime(date);
We need to pass the date
as the argument to convert.
Sometimes we might have to do,
var convertToEST= DateUtility.ConvertToEasternTime(date).Date;
Just make sure you are importing the namespace to use this method.
You need to split up the logic into two;
startTime > now
endTime < now
For a date range the logic should satisfy both (with logical AND, &&
).
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
}
If you're in ET timezone it should work fine, but otherwise you need to do some timezone manipulation. Check the other answers.