在项目开发中,经常会碰到日期处理。比如查询中,可能会经常遇到按时间段查询,有时会默认取出一个月的数据。当我们提交数据时,会需要记录当前日期,等等。下面就看看一些常用的方法。

首先,DateTime是一个struct。很多时候,会把它当成一个类。但它真的不是,MSDN上的描述如下:

DateTime结构:表示时间上的一刻,通常以日期和当天的时间表示。语法:

[SerializableAttribute]
public struct DateTime : IComparable, IFormattable,
IConvertible, ISerializable, IComparable<DateTime>, IEquatable<DateTime>

MSDN连接:MSDN DateTime结构

一、DateTime.Now属性

实例化一个DateTime对象,可以将指定的数字作为年月日得到一个DateTime对象。而DateTime.Now属性则可获得当前时间。如果你想按年、月、日分别统计数据,也可用DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day获取。同理,当前的时分秒也可以这样的方式获取。还可以在当前时间加上一个段时间等操作。

        static void Main(string[] args)
{
DateTime newChina = new DateTime(, , );
Console.WriteLine(newChina);
Console.WriteLine("当前时间:");
Console.WriteLine("{0}年,{1}月,{2}日",DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
Console.WriteLine("{0}时,{1}分, {2}秒",DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
Console.WriteLine("三天后:{0}",DateTime.Now.AddDays());
Console.ReadLine();
}

结果:

二、ToString方法

DateTime的ToString方法有四种重载方式。其中一个重载方式允许传入String,这就意味着你可以将当前DateTime对象转换成等效的字符串形式。比如我们将当前时间输出,日期按yyyy-mm-dd格式,时间按hh:mm:ss格式。

   Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd"));
Console.WriteLine(DateTime.Now.ToString("hh:mm:ss"));

还有一个重载形式是需要提供IFormatProvider,使用指定的区域性特定格式信息将当前 DateTime 对象的值转换为它的等效字符串表示形式。

  static void Main(string[] args)
{
CultureInfo jaJP = new CultureInfo("ja-JP");
jaJP.DateTimeFormat.Calendar = new JapaneseCalendar();
DateTime date1 = new DateTime(, , );
DateTime date2 = new DateTime(, , ); try
{
Console.WriteLine(date2.ToString(jaJP));
Console.WriteLine(date1.ToString(jaJP));
}
catch (ArgumentOutOfRangeException)
{
Console.WriteLine("{0:d} is earlier than {1:d} or later than {2:d}",
date1,
jaJP.DateTimeFormat.Calendar.MinSupportedDateTime,
jaJP.DateTimeFormat.Calendar.MaxSupportedDateTime);
}
Console.ReadLine();
}

结果:

没太明白,日本历史那么短?百度了一下1868年9月8日,明治维新以后了。

DateTimeFormatInfo类, 这里有比较全的时间日期格式对应的字符串。

三、DaysInMonth方法及IsLeapYear方法

DaysInMonth方法需要两个Int32型参数,返回指定年份指定月份的天数。关于月份的天数,多数只有2月需要特殊照顾一下。剩余的月份,无论哪一年的天数都是固定的。而二月呢,不但不是其他月份的30天或31天,她还分个闰年非闰年。

    static void Main(string[] args)
{
Console.WriteLine("2000年至2015年中二月的天数");
for (int i = ; i < ; i++)
{
Console.WriteLine("{0}年2月有:{1}天", i, DateTime.DaysInMonth(i, ));
}
Console.ReadLine();
}

输出结果:

从输出结果中可以看出,2月为29天的年份为闰年。但其实DateTime还提供了判断闰年的方法IsLeapYear,该方法只要一个Int32的参数,若输入的年份是闰年返回true,否则返回false。(.Net Framework就是这么贴心,你要的东西都给你封装好了,直接拿来用好了。)要是没这个方法呢,得自己去按照闰年的规则去写个小方法来判断。

 static void Main(string[] args)
{
Console.WriteLine("2000年至2015年中二月的天数");
for (int i = ; i < ; i++)
{
if (DateTime.IsLeapYear(i))
Console.WriteLine("{0}年是闰年,2月有{1}天", i, DateTime.DaysInMonth(i, ));
else
Console.WriteLine("{0}年是平年,2月有{1}天",i,DateTime.DaysInMonth(i,));
}
Console.ReadLine();
}

微软现在已经将.NetFramework开源了,这意味着可以自己去查看源代码了。附上DateTime.cs的源码链接,以及IsLeapYear方法的源代码。虽然仅仅两三行代码,但在实际开发中,你可能一时间想不起闰年的计算公式,或者拿捏不准。封装好的方法为你节省大量时间。

DateTime.cs源码中IsLeapYear方法

      // Checks whether a given year is a leap year. This method returns true if
// year is a leap year, or false if not.
//
public static bool IsLeapYear(int year) {
if (year < || year > ) {
throw new ArgumentOutOfRangeException("year", Environment.GetResourceString("ArgumentOutOfRange_Year"));
}
Contract.EndContractBlock();
return year % == && (year % != || year % == );
}

 总结

介绍了几个算是比较常用的方法。在自己的项目中遇到日期操作的时候,多看看.NetFramework给我们提供了什么样的方法。很多时候用所提供的方法拼凑一下,就能轻易的获取到我们想要的日期或者时间。

最新文章

  1. CentOS Linux系统下更改Apache默认网站目录
  2. I/O优化篇
  3. java 判断两个时间相差的天数
  4. 【原】macbook不睡眠的排查与解决
  5. KMP 算法总结
  6. Entity SQL 初入
  7. jQuery 选择器【1】
  8. Advanced Customization of the jQuery Mobile Buttons | Appcropolis
  9. python 日期 &amp; 时间
  10. Windows下安装虚拟机和Linux
  11. 基于Android的上课助手的概况及第一周冲刺详情
  12. BZOJ_1823_[JSOI2010]满汉全席_2-sat+tarjan
  13. 关于golang的defer的练习
  14. Antlr4 入门
  15. 安装虚拟机和Linux系统的学习
  16. 自动填写IE的网页的输入框的内容
  17. ClipboardJS的坑,
  18. 114th LeetCode Weekly Contest Array of Doubled Pairs
  19. unity手游使用terrian注意事项
  20. ASP.NET MVC Cookie 身份验证

热门文章

  1. VBA怎样统计同一类型的数据的总和
  2. 熬之滴水穿石:Spring--精简的J2EE(6)
  3. codeforece Round#311 BCDE
  4. 理解cookie的path和domain属性(转)
  5. OSChina底层数据库操作的类(QueryHelper)源代码
  6. mysqldump: Couldn&#39;t execute &#39;show events&#39;: Cannot proceed because system tables used by Event Schedu
  7. 浏览器被劫持到http://hao.169x.cn/?v=108的解决办法
  8. 【NO.3】 c program to caculate and display sum of two matrix
  9. HTML5实际和离线应用分析
  10. Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1