如何制作限时网页?

时间:2014-01-09 15:54:03

标签: c# asp.net datetime

我正在为某家公司开发一个在线订购系统(在C#ASP.NET中)。他们的主要要求是只允许他们的经销商在指定的时间窗口(上午8点到下午12点)之间订购。

至于安全性,我从服务器端获取当前时间,在我的网页的代码隐藏文件中使用select getdate() SQL命令。

我正以DATETIME格式获得该时间。我只想得到时间,所以我打电话给DateTime.toShortTimeString(),但这给了我一个字符串,我无法在任何时间计算。请注意,我无法使用System.DateTime.Now因为它会给我客户端日期。如果客户更改了他们的PC日期,我的网页可能会在指定的时间窗口之外变为可用。

如何比较时间值?我应该使用TimeSpan,如果是,请如何使用?

4 个答案:

答案 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'

现在将您的数据与上述时间进行比较。