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

首先,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给我们提供了什么样的方法。很多时候用所提供的方法拼凑一下,就能轻易的获取到我们想要的日期或者时间。

C# DateTime结构的常用方法的更多相关文章

  1. C++ DateTime 结构

    OS:Win7 ,Tools:VS2015 DateTime.h #pragma once struct DateTime { public: unsigned Year; // years sinc ...

  2. time 与 datetime 模块的常用方法

    时间格式 一个名词: UTC(Coordinated Universal Time):格林威治天文时,世界标准时间.中国为东八区 UTC+8 在编程的世界中,一定要了解的几种时间格式: 1.时间戳 从 ...

  3. C# 计算时间差 用timespan函数

    TimeSpan 结构  表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 1.DateTime值类型代表了一个从公元0001年1月1日0点0分 ...

  4. winform timespan 两个时间的间隔(差) 分类: WinForm 2014-04-15 10:14 419人阅读 评论(0) 收藏

    TimeSpan 结构  表示一个时间间隔. 先举一个小例子:(计算两个日期相差的天数) 代码如下: DateTime dt = DateTime.Now.ToShortDateString(yyyy ...

  5. ASP.NET中TimeSpan的用法

    一.TimeSpan常量.字段 TimeSpan.MaxValue; // 10675199.02:48:05.4775807TimeSpan.MinValue; //-10675199.02:48: ...

  6. C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库

    C# DateTime的11种构造函数   别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...

  7. .NET DateTime类型变量作为参数时设置默认值

    一个小的 Tips. .NET 中函数参数的默认值需要是编译时常量.如果参数是引用类型,可以设置Null,如果是值类型,可以设置相应的编译时常量,如整型可以用整数,但对于DateTime(结构体,值类 ...

  8. 将不确定变为确定~DateTime.MinValue和MaxValue引发的异常

    回到目录 问题描述: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间 概念相关 .Net中的DateTime结 ...

  9. 【C#】第3章学习要点(三)--常用类和结构的用法

    分类:C#.VS2015 创建日期:2016-06-19 使用教材:(十二五国家级规划教材)<C#程序设计及应用教程>(第3版) 一.DateTime结构和TimeSpan结构 DateT ...

随机推荐

  1. 【转】Android开发中让你省时省力的方法、类、接口

    转载 http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share& ...

  2. ACM Registration system

    Registration system 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 A new e-mail service "Berlandesk&q ...

  3. json 输出中文乱码解决办法

    echo json_decode(json_encode("修改成功")); 这样就行了

  4. 【转】git与github在ubuntu下的使用 -- 不错

    原文网址:http://www.cnblogs.com/cocowool/archive/2010/10/19/1855616.html 最近开始使用git对kohana3的文档做一些补充的工作,使用 ...

  5. [Egret]长按图片分享、分享图片、本地存储

    egret 分享有API可以把一个显示对象树渲染成一个位图纹理,我把它赋值给 HTML 的 Image 元素,就实现了图片的显示,在微信中,通过长按图片可以分享出去.当然在其他浏览器可以保存在本地. ...

  6. enum枚举类

    枚举类可用于定义常量ch01 package edu.nf.demo.ch01; /** * * 枚举类型 */ public enum Color { /** * 红色 */ RED, /** * ...

  7. 通过RMAN 识别失败数据库损坏的对象

    背景 业务起不来,读取数据库时报坏块,无法读取数据 数据库版本:11.2.0.3 数据库无备份,无归档 1. 识别坏块 执行以下命令后,rman 会把坏块信息统计到 v$database_block_ ...

  8. this 指向问题, 三个例子

    'use strict'; var a = 20; function foo () { var a = 1; var obj = { a: 10, c: this.a + 20, fn: functi ...

  9. 51nod 1050 循环数组最大子段和 单调队列优化DP

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 这个呢,这个题之前 求一遍最大值  然后求一遍最小值 ...

  10. Spring AMQP 源码分析 08 - XML 配置

    ### 准备 ## 目标 通过 XML 配置文件使用 Spring AMQP ## 前置知识 <Spring AMQP 源码分析 07 - MessageListenerAdapter> ...