无论日期如何,都要比较时间

Jon*_*Jon 8 .net c# datetime

我有一个对象,其目前的属性为DateTime.

该对象在一个时间范围内被标记为有效.默认值为00:00:00至23:59:59

用户在UI中输入值,并通过以下方式设置属性:

new DateTime(DateTime.Now.Year, 
             DateTime.Now.Month, 
             DateTime.Now.Day, 
             model.Hours, 
             model.Minutes, 
             model.Seconds)
Run Code Online (Sandbox Code Playgroud)

然后在它到达数据库时将其转换为UTC.

今天的日期是2013年8月29日.如果印度的同事运行此程序,它将在2013年8月28日18:30:00将数据存储在数据库中,因为它们比UTC早5.5小时,因此2013年8月29日00:00:00变为昨天.

当逻辑尝试确定对象是否有效时,逻辑是:

if (DateTime.UtcNow.TimeOfDay > model.MyPropertyFromDB.TimeOfDay)
Run Code Online (Sandbox Code Playgroud)

我们正在尝试确定当前时间是否在00:00:00和23:59:59之间

这是因为14:00(当前时间)不大于18:30

什么是比较时间的最佳方法?

将值存储为DateTimeOffSet帮助,是否使用ToLocal()确定?

其他考虑因素是印度的用户正在使用在英国托管的应用程序,因此需要了解时区.

谢谢

Dan*_*ard 0

因此,如果我理解正确的话,您在数据库中保存了 UTC 时间,并且您正在尝试确定它是否属于特定时间范围内?我不确定您是否想要当地时间或 UTC 的时间范围,所以这里是:

DateTime dbTime = model.MyPropertyFromDB;

TimeSpan minTime = new TimeSpan(0, 0, 0);
TimeSpan maxTime = new TimeSpan(23, 59, 59);

if (dbTime.TimeOfDay > minTime && dbTime.TimeOfDay < maxTime)
{
    //Within time range (UTC)
}

if (dbTime.ToLocalTime().TimeOfDay > minTime && dbTime.ToLocalTime().TimeOfDay < maxTime)
{
    //Within time range (local)
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您想将 Now 与数据库中对象的开始时间和结束时间进行比较:

TimeSpan now = DateTime.UtcNow.TimeOfDay;
TimeSpan startDate = model.startDate.TimeOfDay;
TimeSpan endDate = model.endDate.TimeOfDay;

if (now > startDate && now < endDate)
{
    //Within time range (UTC)
}
Run Code Online (Sandbox Code Playgroud)