我正在为某家公司开发一个在线订购系统(在C#ASP.NET中)。他们的主要要求是只允许他们的经销商在指定的时间窗口(上午8点到下午12点)之间订购。
至于安全性,我从服务器端获取当前时间,在我的网页的代码隐藏文件中使用select getdate()
SQL命令。
我正以DATETIME
格式获得该时间。我只想得到时间,所以我打电话给DateTime.toShortTimeString()
,但这给了我一个字符串,我无法在任何时间计算。请注意,我无法使用System.DateTime.Now
因为它会给我客户端日期。如果客户更改了他们的PC日期,我的网页可能会在指定的时间窗口之外变为可用。
如何比较时间值?我应该使用TimeSpan
,如果是,请如何使用?
答案 0 :(得分:4)
DateTime结构有一个TimeOfDay property。
一个简单的算法可能如下所示:
DateTime now = ...; // value returned from SELECT GETDATE()
TimeSpan currentTime = now.TimeOfDay;
if (currentTime.Hours >= 8 && currentTime.Hours < 12) {
...
}
由于TimeSpan实现了比较运算符,您还可以执行以下操作:
DateTime now = ...; // value returned from SELECT GETDATE()
TimeSpan currentTime = now.TimeOfDay;
TimeSpan fromTime = new TimeSpan(8, 0, 0);
TimeSpan toTime = new TimeSpan(12, 0, 0);
if (currentTime >= fromTime && currentTime <= toTime) {
...
}
答案 1 :(得分:0)
虽然你不能使用DateTime.Now,但你可以从SQL Server中获取DateTime对象。
我只能猜测你是如何将查询发送到数据库的,但这是一个实现:
DateTime currentDateTime = DateTime.MinValue;
using (DbCommand command = database.GetSqlStringCommand("SELECT GETDATE()"))
{
using (IDataReader dataReader = (IDataReader)database.ExecuteReader(command))
{
if (dataReader.Read())
{
currentDateTime = (DateTime)dataReader[0];
}
}
}
TimeSpan from = new TimeSpan(8, 0, 0); // 8am
TimeSpan to = new TimeSpan(24, 0, 0); // 12pm
bool canOrderNow = currentDateTime != DateTime.MinValue && currentDateTime.TimeOfDay >= from && currentDateTime.TimeOfDay < to;
答案 2 :(得分:0)
您应该在服务器上进行日期比较,并确保您的用户知道他们必须下订单的时区。这种方式,当你说在上午8点到12点之间,用户将根据自己的时区知道何时完成订单。
答案 3 :(得分:0)
如果您使用的是sql2008或以上....那么您可以使用sql server的time数据类型。您只能使用
提取时间Sql-server 2008:
'选择演员(AttDate as time)[时间] 来自yourtable'
早期版本:
'选择转换(char(5),AttDate,108)[时间] 来自yourtable'
现在将您的数据与上述时间进行比较。