smalldatetime的有效时间范围1900/1/1~2079/6/6
datetime的有效时间范围1753/1/1~9999/12/31
它们更关键的差别是smalldatetime只精准到分,而datetime则可精准到3.33毫秒。
SQL Server中,smalldatetime只能精确到分钟,而datatime可以精确到3%秒(3.33毫秒)。
smalldatetime占用4个字节,前2个字节存储base date(1900年1月1日)之后的天数。后2个字节存储午夜后的分钟数。
datetime占用8个字节,前4个字节存储base date(即1900年1月1日)之前或之后的天数,后4个字节存储午夜后的毫秒数。
由于datetime的精度是3%秒,这就涉及到小数,毫秒之前可以是冒号,也可以是小数点。使用冒号时表示的意义同时分秒间隔,11:11:11:21表示021毫秒,前面的0省略,而小数点表示的意义同数学上的小数点,如11:11:11.21表示210毫秒,省略的是后面的0。
//获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString();// 2008-9-4 20:12:12
//获取日期 DateTime.Now.ToLongDateString().ToString(); // 2008年9月4日 DateTime.Now.ToShortDateString().ToString(); // 2008-9-4 DateTime.Now.ToString("yyyy-MM-dd"); // 2008-09-04 DateTime.Now.Date.ToString(); // 2008-9-4 0:00:00
//获取时间 DateTime.Now.ToLongTimeString().ToString(); // 20:16:16 DateTime.Now.ToShortTimeString().ToString(); // 20:16 DateTime.Now.ToString("hh:mm:ss"); // 08:05:57 DateTime.Now.TimeOfDay.ToString(); // 20:33:50.7187500
//其他 DateTime.ToFileTime().ToString(); // 128650040212500000 DateTime.Now.ToFileTimeUtc().ToString(); // 128650040772968750 DateTime.Now.ToOADate().ToString(); // 39695.8461709606 DateTime.Now.ToUniversalTime().ToString(); // 2008-9-4 12:19:14
DateTime.Now.Year.ToString(); 获取年份 // 2008 DateTime.Now.Month.ToString(); 获取月份 // 9 DateTime.Now.DayOfWeek.ToString();获取星期 // Thursday DateTime.Now.DayOfYear.ToString();获取第几天 // 248 DateTime.Now.Hour.ToString(); 获取小时 // 20 DateTime.Now.Minute.ToString(); 获取分钟 // 31 DateTime.Now.Second.ToString(); 获取秒数 // 45
//n为一个数,可以数整数,也可以事小数 dt.AddYears(n).ToString(); //时间加n年 dt.AddDays(n).ToString(); //加n天 dt.AddHours(n).ToString(); //加n小时 dt.AddMonths(n).ToString(); //加n个月 dt.AddSeconds(n).ToString(); //加n秒 dt.AddMinutes(n).ToString(); //加n分 1.string strTime = DateTime.Now.ToLongTimeString();
-------------------------------------------------------------------------------- 2. DateTime dt = DateTime.Now; String str = dt.ToString("yyyy-MM-dd");
或者 string str = DateTime.Now.ToString("yyyy-MM-dd"); or string str = DateTime.Now.ToShortDateString();
---------------------------------------------------------------------
3.DateTime.Now.ToString("yyyy-MM-dd");取日期,得到如2005-02-18的格式 DateTime.Now.ToString("hh:mm:ss");取时间,得到如10:45:30的格式 格式 显示 M/d/yy 12/7/58 d-MMM 7-Dec d-MMMM-yy 7-December-58 d MMMM 7 December MMMM yy December 58 hh:mm tt 08:50 PM h:mm:ss t 8:50:35 P H:mm 20:50 H:mm:ss 20:50:35 M/d/yyyy H:mm 12/7/1958 20:50
字符 说明 (:)时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由系统的LocaleID值确定。 (/)日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由您的区域设置确定。 (%)用于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也用于表明单字母格式应以用户定义格式读取。有关详细信息,请参阅下面的内容。 d将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d。 dd将日显示为带前导零的数字(如 01)。 ddd将日显示为缩写形式(例如 Sun)。 dddd将日显示为全名(例如 Sunday)。 M将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %M。 MM将月份显示为带前导零的数字(例如 01/12/01)。 MMM将月份显示为缩写形式(例如 Jan)。 MMMM将月份显示为完整月份名(例如 January)。 gg显示时代/纪元字符串(例如 A.D.) h使用12小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用%h。 hh使用 12小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。 H使用 24小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用%H。 HH使用 24小时制将小时显示为带前导零的数字(例如 01:15:15)。 m将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m。 mm将分钟显示为带前导零的数字(例如 12:01:15)。 s将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s。 ss将秒显示为带前导零的数字(例如 12:15:05)。 f显示秒的小数部分。例如,ff将精确显示到百分之一秒,而 ffff将精确显示到万分之一秒。用户定义格式中最多可使用七个f符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。 t使用 12小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M之间的任一小时显示大写的P。如果这是用户定义的数字格式中的唯一字符,请使用 %t。 tt使用 12小时制,并对中午之前任一小时显示大写的 AM;对中午到 11:59 P.M之间的任一小时显示大写的PM。 y将年份 (0-9)显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y。 yy以带前导零的两位数字格式显示年份(如果适用)。 yyy以三位数字格式显示年份。 yyyy以四位数字格式显示年份。 z显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z。 zz显示带前导零的时区偏移量(例如 -08) zzz显示完整的时区偏移量(例如 -08:00)
DateTime.Now.ToShortTimeString() DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString();//127756416859912816 dt.ToFileTimeUtc().ToString();//127756704859912816 dt.ToLocalTime().ToString();//2005-11-5 21:21:25 dt.ToLongDateString().ToString();//2005年11月5日 dt.ToLongTimeString().ToString();//13:21:25 dt.ToOADate().ToString();//38661.5565508218 dt.ToShortDateString().ToString();//2005-11-5 dt.ToShortTimeString().ToString();//13:21 dt.ToUniversalTime().ToString();//2005-11-5 5:21:25 dt.Year.ToString();//2005 dt.Date.ToString();//2005-11-5 0:00:00 dt.DayOfWeek.ToString();//Saturday dt.DayOfYear.ToString();//309 dt.Hour.ToString();//13 dt.Millisecond.ToString();//441 dt.Minute.ToString();//30 dt.Month.ToString();//11 dt.Second.ToString();//28 dt.Ticks.ToString();//632667942284412864 dt.TimeOfDay.ToString();//13:30:28.4412864 dt.ToString();//2005-11-5 13:47:04 dt.AddYears(1).ToString();//2006-11-5 13:47:04 dt.AddDays(1.1).ToString();//2005-11-6 16:11:04 dt.AddHours(1.1).ToString();//2005-11-5 14:53:04 dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04 dt.AddMonths(1).ToString();//2005-12-5 13:47:04 dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05 dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10 dt.AddTicks(1000).ToString();//2005-11-5 13:47:04 dt.CompareTo(dt).ToString();//0 dt.Add(?).ToString();//问号为一个时间段 dt.Equals("2005-11-6 16:11:04").ToString();//False dt.Equals(dt).ToString();//True dt.GetHashCode().ToString();//1474088234 dt.GetType().ToString();//System.DateTime dt.GetTypeCode().ToString();//DateTime dt.GetDateTimeFormats('s')[].ToString();//2005-11-05T14:06:25 dt.GetDateTimeFormats('t')[].ToString();//14:06 dt.GetDateTimeFormats('y')[].ToString();//2005年11月 dt.GetDateTimeFormats('D')[].ToString();//2005年11月5日 dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05 dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 05 dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11月5日 dt.GetDateTimeFormats('M')[].ToString();//11月5日 dt.GetDateTimeFormats('f')[].ToString();//2005年11月5日 14:06 dt.GetDateTimeFormats('g')[].ToString();//2005-11-5 14:06 dt.GetDateTimeFormats('r')[].ToString();//Sat, 05 Nov 2005 14:06:25 GMT string.Format("{0:d}",dt);//2005-11-5 string.Format("{0}",dt);//2005年11月5日 string.Format("{0:f}",dt);//2005年11月5日 14:23 string.Format("{0:F}",dt);//2005年11月5日 14:23:23 string.Format("{0:g}",dt);//2005-11-5 14:23 string.Format("{0:G}",dt);//2005-11-5 14:23:23 string.Format("{0:M}",dt);//11月5日 string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT string.Format("{0:s}",dt);//2005-11-05T14:23:23 string.Format("{0:t}",dt);//14:23 string.Format("{0:T}",dt);//14:23:23 string.Format("{0:u}",dt);//2005-11-05 14:23:23Z string.Format("{0:U}",dt);//2005年11月5日 6:23:23 string.Format("{0:Y}",dt);//2005年11月 string.Format("{0}",dt);//2005-11-5 14:23:23 string.Format("{0:yyyyMMddHHmmssffff}",dt); 计算2个日期之间的天数差 ----------------------------------------------- DateTime dt1 = Convert.DateTime("2007-8-1"); DateTime dt2 = Convert.DateTime("2007-8-15"); TimeSpan span = dt2.Subtract(dt1); int dayDiff = span.Days + 1; 计算某年某月的天数 ----------------------------------------------- int days = DateTime.DaysInMonth(2007, 8); days = 31; 给日期增加一天、减少一天 ----------------------------------------------- DateTime dt =DateTime.Now; dt.AddDays(1); //增加一天 dt.AddDays(-1);//减少一天 其它年份方法类似... Oracle SQL里转换日期函数 ----------------------------------------------- to_date("2007-6-6",'YYYY-MM-DD"); to_date("2007/6/6",'yyyy/mm/dd"); 如下一组数据,如何查找表里包含9月份的记录: CGGC_STRATDATE CGGC_ENDDATE ========================================= 2007-8-4 2007-9-5 2007-9-5 2007-9-20 2007-9-22 2007-10-5 SELECT * FROM TABLE (TO_DATE('2007/9/1','yyyy/mm/dd') BETWEEN CGGC_STRATDATE AND CGGC_ENDDATE OR CGGC_STRATDATE >=TO_DATE('2007/9/1','yyyy/mm/dd') AND CGGC_ENDDATE<=TO_DATE('2007/9/30','yyyy/mm/dd') " OR TO_DATE('2007/9/30','yyyy/mm/dd') BETWEEN CGGC_STRATDATE AND CGGC_ENDDATE) ORDER BY CGGC_STRATDATE ASC
