2011-05-13 20 views
36

我試圖創建一個在金融市場開放時觸發某些代碼的應用程序。基本上在僞代碼:如何將DateTime轉換爲東部時間

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

有沒有辦法,我可以做到這一點在C#中使用DateTime對象?

回答

86

試試這個:

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

或其他人,這是否也佔「東部夏令時」?或者您是否必須檢測DST是否打開,然後指定要使用哪個區域? – 2012-01-06 16:19:56

+3

小額外:使用 DateTime.UtcNow這是什麼意思與timeUtc – michaelAngelo 2013-02-07 19:48:15

+7

'東部標準時間'應該正確處理DST。請參閱http://stackoverflow.com/questions/964894/how-to-convert-time-between-timezones-utc-to-edt – csm8118 2013-07-23 18:51:23

5

你也許可以使用TimeZoneInfo類的ConvertTime方法給定的日期時間轉換爲東部時區,並從那裏做比較。

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

您需要將邏輯拆分爲兩部分;

  • 檢查日期比開始日期以上,startTime > now
  • 檢查日期小於結束日期,endTime < now

對於日期範圍內的邏輯應同時滿足(與邏輯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 
} 

如果您在ET時區是它應該工作正常,但否則,你需要做一些時區的操作。檢查其他答案。

相關問題