2011-05-13 26 views
36

Estoy tratando de crear una aplicación que active algún código cuando los mercados financieros estén abiertos. Básicamente, en pseudo código:Cómo convertir DateTime a hora del este

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

¿Hay alguna manera de hacer esto con el objeto DateTime en C#?

Respuesta

86

Prueba esto:

var timeUtc = DateTime.UtcNow; 
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone); 
+8

o cualquier otra persona, ¿esto también cuenta para 'Eastern Daylight Time'? ¿O tiene que detectar si el horario de verano está activado y luego especificar qué zona usar? –

+3

small addition: use DateTime.UtcNow esto es lo que se entiende con timeUtc – michaelAngelo

+7

'Eastern Standard Time' debe manejar DST correctamente. Ver http://stackoverflow.com/questions/964894/how-to-convert-time-between-timezones-utc-to-edt – csm8118

5

Probablemente se podría utilizar el método de la clase ConvertTimeTimeZoneInfo para convertir un DateTime dada a la zona horaria del Este y hacer la comparación de allí.

var timeToConvert = //whereever you're getting the time from 
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
var targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est); 
-5

Tiene que dividir la lógica en dos;

  • Comprobar si la fecha es más que la fecha de inicio, startTime > now
  • Comprobar si la fecha es menor que la fecha de finalización, endTime < now

Para un intervalo de fechas de la lógica debe satisfacer tanto (con lógica Y, &&)

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 
} 

Si estás en la zona horaria ET, debería funcionar bien, pero por lo demás necesitas hacer algo de manipulación de la zona horaria. Verifique las otras respuestas.