【发布时间】:2023-04-04 09:22:01
【问题描述】:
我正在尝试将我的 DateTime 开始变量设置为根据现在的时间进行更改。我的班次(不同的开始时间)是 1:6am-2pm 2:2pm-10pm 3:10pm-6am。我无法编写 if 语句来给出正确的时间。
短版。我正在尝试编写 C# if 语句来确定它当前是三个 start 中的哪一个。下面是代码。以上是开始时间。
我试图实现的逻辑是将 DateTime 开始变量设置为我列出的 3 个日期时间之一。早上、下午或晚上。开始变量需要根据 DateTime.Now 更改值。视图将每 15 秒刷新一次页面。这将更新 DateTime.Now 变量。
感谢您的宝贵时间。
DateTime MORNING;
DateTime AFTERNOON;
DateTime EVENING;
if (DateTime.Now.Hour > 6 || (DateTime.Now.Hour == 6 && DateTime.Now.Minute >= 00))
MORNING = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 6, 00, 0);
else
MORNING = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 6, 30, 0);
if (DateTime.Now.Hour > 14 || (DateTime.Now.Hour == 14 && DateTime.Now.Minute >= 00))
AFTERNOON = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 14, 00, 0);
else
AFTERNOON = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 14, 00, 0);
if (DateTime.Now.Hour > 20 || (DateTime.Now.Hour == 20 && DateTime.Now.Minute >= 00))
EVENING = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 20, 00, 0);
else
EVENING = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 20, 00, 0);
DateTime start = ((EVENING > MORNING) ? EVENING : MORNING);
DateTime end = start.AddHours(8);
【问题讨论】:
-
请提供您想要实现的确切逻辑,目前还不清楚。旁注:不要连接/插入 SQL 值,而是使用适当的参数化。您似乎有一个设计问题,因为您每年都有一个表,它应该是一个带有年份列的表。不要缓存连接对象。使用
using块处理连接、命令和读取器对象 -
@Charlieface 我确实意识到当它改变月份或年份时,表格是一个大问题,但是我无法控制它。我需要使用如上所示的表格来构建程序。我试图让我的任务更清晰,并删除了一些对解决问题没有帮助的代码。
-
@Primdonm 不是真的。您可以对
UNION ALL使用视图,因此您只需查询视图。 IF 表在VDH_Date上具有CHECK约束,以确保仅输入正确的日期,并且 IF 在查询中使用VDH_Date,服务器将能够自动选择正确的表进行查询,而不是扫描所有表。这是一种非常早期的手工分区形式。在所有受支持的 SQL Server 版本(2016 及更高版本)中,您可以使用表分区通过单个表实现相同的目的。 -
@Primdonm 之所以有效,是因为服务器知道 CHECK 约束,因此可以消除不可能有过滤日期的表。如果没有 CHECK 约束和
WHERE子句中的VHD_Date,服务器将不得不扫描所有表。