【发布时间】:2011-08-25 06:00:15
【问题描述】:
我正在尝试创建一个在金融市场开放时触发一些代码的应用程序。基本上是伪代码:
if(9:30AM ET < Time.Now < 4:00PM ET) {//do something}
有没有办法在 C# 中使用 DateTime 对象来做到这一点?
【问题讨论】:
我正在尝试创建一个在金融市场开放时触发一些代码的应用程序。基本上是伪代码:
if(9:30AM ET < Time.Now < 4:00PM ET) {//do something}
有没有办法在 C# 中使用 DateTime 对象来做到这一点?
【问题讨论】:
试试这个:
var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
【讨论】:
Eastern Daylight Time?还是必须先检测 DST 是否开启,然后指定使用哪个区域?
Eastern Standard Time 应该正确处理夏令时。见stackoverflow.com/questions/964894/…
Ameria/New_York instad of Eastern Standard TIme。
Ameria/New_York 拼写错误(请注意以防其他人像我一样尝试复制和粘贴)。否则,感谢您的评论!
您可能可以使用TimeZoneInfo 类的ConvertTime 方法将给定的DateTime 转换为东部时区并从那里进行比较。
var timeToConvert = //whereever you're getting the time from
var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
【讨论】:
你需要把逻辑一分为二;
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 时区,它应该可以正常工作,但否则您需要进行一些时区操作。检查其他答案。
【讨论】: