如何将日期时间转换为东方时间

我试图创建一个应用程序,在金融市场开放时触发一些代码。基本上是伪代码:

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

有没有一种方法可以使用 C # 中的 DateTime 对象来实现这一点?

94446 次浏览

试试这个:

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

您可以使用 时区信息类的 转换时间方法将给定的 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 时区,它应该工作的很好,但否则你需要做一些时区操作。看看其他答案。

您可以为它创建一个扩展方法,

注意: 这正在将当前的 DateTime 转换为 EST

像这样,

    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);
}

你可以像这样使用它,

EasternTime = DateTime.Now.ConvertToEasternTime(),

只要确保导入了名称空间以使用此方法即可。

注意: 下面的方法正在将给定的 DateTime 转换为 EST

    private static TimeZoneInfo GetEasternTimeZoneInfo()
{
TimeZoneInfo tz = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
: TimeZoneInfo.FindSystemTimeZoneById("America/New_York");


return tz;
}

上述方法返回 EST TimeZone。

    public static DateTime ConvertToEasternTime(DateTime date)
{
return TimeZoneInfo.ConvertTimeFromUtc(date, GetEasternTimeZoneInfo());
}

上面的方法返回您作为参数传入到 EST 时间的日期

要使用上述方法我们可以做到,

     var convertToEST= DateUtility.ConvertToEasternTime(date);

我们需要传递 date作为转换的参数。 有时候我们不得不这么做,

     var convertToEST= DateUtility.ConvertToEasternTime(date).Date;

只要确保导入了名称空间以使用此方法即可。