在开发网站时,有时需要获取最新的信息,如获取最新注册的用户信息、最新订单信息等。在本实例中,使用DateDiff方法来获取系统时间与指定时间的间隔数,运行结果如图7.6所示。
图7.6 使用DateDiff方法获取日期时间的间隔数
主要代码如下:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox1.Text = this.Calendar1.SelectedDate.ToString();
Label2.Text = Microsoft.VisualBasic.DateAndTime.DateDiff(DateInterval.Day, Convert.ToDateTime(TextBox1.Text), System.DateTime.Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday, Microsoft.VisualBasic.FirstWeekOfYear.Jan1).ToString();
}
注意:在程序中调用DateAndTime.DateDiff方法获取日期时间的间隔数,需要引入命名空间Microsoft.VisualBasic。
DateAndTime.DateDiff方法用来获取日期时间的间隔数,语法格式如下:
public static long DateDiff (
DateInterval/ string Interval,
DateTime Date1,
DateTime Date2,
[OptionalAttribute] FirstDayOfWeek DayOfWeek,
[OptionalAttribute] FirstWeekOfYear WeekOfYear
)
参数说明
l Interval:必选项,是DateInterval枚举值或String的表达式,用来表示Date1和Date2时间间隔的单位(如Year、Month、Day等)。
l Date1:必选项,是DateTime类型的值,在计算中使用的第一个日期/时间值。
l Date2:必选项,是DateTime类型的值,在计算中使用的第二个日期/时间值。
l DayOfWeek:可选项,从指定一周的第一天的FirstDayOfWeek枚举中选择的值。如果未指定,则使用FirstDayOfWeek.Sunday。
l WeekOfYear:可选项,从指定一年的第一周的FirstWeekOfYear枚举中选择的值。如果未指定,则使用FirstWeekOfYear.Jan1。
DATEADD函数向指定日期添加一段时间间隔。例如,在订单(tb_Order)表中将所有订单到期日期都推迟3天,可以使用以下语句得到新的日期:
SELECT DATEADD(day, 3, OrderDate)
FROM tb_Order
注意:如果日期参数的数据类型是smalldatetime,则结果的数据类型也是smalldatetime。可以使用DATEADD向smalldatetime值添加秒或毫秒。
DATEDIFF函数计算指定的两个日期中第二个日期与第一个日期的时间差的日期部分,即该函数得出两个日期之间的间隔,结果是等于(date2-date1)的日期部分的带符号整数值。例如,在订单(tb_Order)表中,查询订单创建时期(orderDate)与系统日期相差的天数。代码如下:
SELECT DATEDIFF(day,orderDate, getDate())
FROM tb_Order
注意:
(1)若DATEDIFF函数中的第一个日期晚于指定的第二个日期,则得到的结果为负数。
(2)如果一个或两个日期参数是smalldatetime值,它们将在内部转换为datetime值。其中,smalldatetime值中的秒和毫秒都自动设置为0,以便进行计算。
在已经启动一个线程之后,常常需要将线程暂停一段时间之后再恢复运行,调用Thread.Sleep()方法可以立即暂停线程指定的毫秒数,将CPU的控制权转给其他线程。
其方法有以下两种:
(1)将当前线程挂起指定的时间,语法结构如下:
public static void Sleep (
int millisecondsTimeout
)
millisecondsTimeout:线程被阻止的毫秒数。如指定为“0”,则表示应挂起此线程以使其他等待线程能够执行;如指定Infinite,表示无限期阻止线程。
例如,将线程挂起3s,代码如下:
Thread.Sleep(3000);
(2)将当前线程阻止指定的时间,语法结构如下:
public static void Sleep (
TimeSpan timeout
)
timeout:设置线程被阻止的时间量TimeSpan。如果指定为“0”,则表示应挂起此线程以使其他等待线程能够执行;如指定Infinite,表示无限期阻止线程。
例如,将线程挂起3s,代码如下:
TimeSpan waitTime = new TimeSpan(0, 0, 3);
Thread.Sleep(waitTime);
注意:一个线程不能使其他线程暂停,但可以调用Threed.Sleep(Timeout.Infinite)方法,将导致线程休息,一直等到其他线程调用方法Tread.Interrupt()时才将它叫醒,若调用Thread.Abort()方法则将它删除。
在本实例中,使用window.setInterval("OnRunTimes();",1000)函数实现每隔1s调用OnRunTimes()函数。得到程序的运行时间,并将其设置为状态栏的文本值。代码如下:
<script language ="javascript">
var second=0;
var minute=0;
var hour=0;
window.setInterval ("OnRunTimes();",1000);
function OnRunTimes()
{
second++;
if(second==60){second=0;minute+=1;}
if(minute==60){minute=0;hour+=1;}
window.status ="程序运行时间"+hour+"小时"+minute+"分钟"+second+"秒";
}
</script>
在开发程序时,有时候需要将字符串转化为日期格式添加到数据库中。例如,在本实例中,使用DateTime类的ParseExact方法将字符串“1999-12-23”转化为日期格式“yyyy-MM-dd”。代码如下:
string strDate = "1999-12-23";
DateTime dt = DateTime.ParseExact(strDate,"yyyy-MM-dd ",null);
注意:DateTime类的ParseExact方法是使用指定的格式和区域性特定格式信息,将日期和时间的指定字符串表示形式转换为等效的DateTime,其中字符串表示的格式必须与指定的格式完全匹配。ParseExact方法的语法结构如下:
public static DateTime ParseExact (
string s,
string format,
IFormatProvider provider
)
参数说明:
s:包含要转换的日期和时间的字符串。
format:s的预期格式。
provider:用于提供有关s的区域性特定格式信息的IFormatProvider接口(提供用于检索控制格式化的对象的机制)。
返回值:DateTime,等效于由format和provider所指定的s中包含的日期和时间。
格式化日期的方法有很多种,本实例主要是通过ToString方法格式化日期,实例运行结果如图7.7所示。
图7.7 使用ToString方法格式化日期
主要代码如下:
protected void Page_Load(object sender, EventArgs e)
{
DateTime dt = new DateTime();
dt = DateTime.Now;
Response.Write("使用ToString方法格式化日期:");
Response.Write("<hr>");
Response.Write("取中文日期显示—年月日时分:" + dt.ToString("f") + "<br>");
Response.Write("取中文日期显示_年月:" + dt.ToString("y") + "<br>");
Response.Write("取当前年月日(格式为:2003-9-23):" + dt.ToString("d") + "<br>");
Response.Write("取当前时分(格式为:14:24):" + dt.ToString("t") + "<br>");
Response.Write("取当前年月日时分秒(格式为:2003923142413):" + dt.ToString("yyyyMMddhhmmss") + "<br>");
Response.Write("取当前年月日时分秒(格式为:2003-9-23 14:24:13):" + dt.ToString("yyyy/MM/dd hh:mm:ss") + "<br>");
Response.Write("<hr>");
}
本实例通过Convert方法将字符串格式转化为等效的日期格式。代码如下:
string strDate = "1999-12-23";
DateTime dt = Convert.ToDateTime(strDate);