使用.NET Framework中新的日期时间类型

概述

写下本文缘于前几天博客园一位朋友发表了一篇.NET面试题的文章,其中一个关于DateTime的问题引起了大家激烈的争论,鉴于日期时间类型是大家开发中会频繁使用的一个中数据类型,这里我们有必要来对.NET Framework中的日期时间类型做一个深入的认识。

从.NET Framework 1.0开始,就提供了DateTime类型来表示一个日期时间类型,它是一个结构类型,并且不可以为空,这在一定程度上给我们在往数据库中保存数据时带来了很大的麻烦,因为我们知道,在数据库中datatime类型是可以为Null的,为了解决这个问题,不得不经常使用DateTime.MinValue来表示,但这并不是我们想要的。幸运的是到了.NET Framework 2.0中,提供了可空类型,此时我们就可以使用Nullable<DateTime>来表示一个日期时间类型,它是可以为Null的,这给我们带来了极大的方便。

到了.NET Framework 3.5中,又为我们提供了一个全新的日期时间类型DateTimeOffset,它通常以相对于格林威治时间(GMT,Greenwich Mean Time)的日期和时间来表示,格林威治时间又被称为国际标准时间UTC(Universal Time Code)。除此之外,在.NET Framework中还为我们提供了TimeZone类用来表示时区,到了.NET Framework 3.5中,对TimeZone类进一步增强,提供了TimeZoneInfo类来表示世界上的任何时区。

在本文中,我们将对以上日期时间类型、时区类进行详细的介绍。

DateTime和DateTimeOffset

DateTime 值类型表示值范围在公元0001 年1 月1 日午夜12:00:00 到公元9999 年12月31日晚上11:59:59 之间的日期和时间;DateTimeOffset包含一个DateTime 值以及一个名为Offset属性,该属性用于确定当前 DateTimeOffset 实例的日期和时间与UTC之间的差值,我们先来看一下这段代码的输出:

static void Main(string[] args)
{
  Console.WriteLine(DateTime.Now);
  Console.WriteLine(DateTimeOffset.Now);
}

输出结果为:

可以看到,DateTime输出了日期和时间,DateTimeOffset类型不仅输出了日期和时间,还给出当前时间与UTC之间的差值。接下来我们再看一段代码,如何手工构造一个DateTime和DateTimeOffset实例:

static void Main(string[] args)
{
  DateTime dateA = new DateTime(2008,8,26,23,1,48);
  DateTimeOffset dateB = new DateTimeOffset(2008, 8, 26, 23, 1, 48,
    new TimeSpan(4,0,0));
  Console.WriteLine(dateA);
  Console.WriteLine(dateB);
}

输出结果如下图所示:

时间: 2024-10-06 14:56:04

使用.NET Framework中新的日期时间类型的相关文章

SQL Server 2008中新的日期时间数据类型

SQL Server 2008 终于发布新版了,虽然还只是另一个社区测试版而非完全版.每当新软件发布,大 家最关系的问得最多的问题就是:有些什么新特性?SQL Server 2008有很多新功能和新工具.不过,本文 还是主要为大家介绍SQL Server 2008七月预览版引入的新数据类型,并对DATETIME数据类型的功能进行 专门讨论. SQL Server 2008中DATETIME功能的最大转变就是引入了四种DATETIME数据类型,分别为 DATE.TIME.DATETIMEOFFSE

SQL SERVER 2005数据库日期时间类型之灵异事件

问题描述 我现在使用的SQLSERVER2005是快速开发版的,里面的日期时间类型,以前都是正常的都能显示2009-2-202:22:23这样的形式,但今天突然发现只能显示为2009-2-202:22不知为何?打开所有的表,全都只显示到分钟,不过在查询的时候,倒是全都能查出至微秒级的.我不明白为何会这样?假如我要显示出完整的日期时间类型,我该如何做?这个不是我插入语句的问题,直接在表中写也都会自动省略掉秒,小弟分少,还望高手相助! 解决方案 解决方案二:查看一下电脑日期格式是否显示到秒!

DBType的有没有类型对应acceess数据的日期/时间类型?

问题描述 在数据库中定义了一个日期/时间类型的字段然后在程序中定义了一个datatime类型的数据然后组织参数:AccessHelper.MakeInParam("@createDate",DbType.DateTime,8,entity.CreateDate)插入时,同时数据类型不符;改用DbType.Date后,插入的数据却只有数据我想要详细时间,日期+时间,有没有办法?(暂时不想使用OleDbType,改起来的话涉及太多都要改). 解决方案 解决方案二:没有回答,自己顶一下啊~~

Python中常用的日期时间函数实例

 代码如下 复制代码 处理日志数据时,经常要对日期进行进行计算,比如日期加上天数.日期相差天数.日期对应的周等计算,本文收集了几个常用的python日期功能函数,一直更新中. 直接贴代码(文件名DateUtil.py),函数功能可以直接查看注释: # -*- encoding:utf8 -*- ''' @author: crazyant @version: 2013-10-12 ''' import datetime, time #定义的日期的格式,可以自己改一下,比如改成"$Y年$m月$d日&

CAML中比较日期时间类型

在做Sharepoint的列表查询的时候,经常要用到CAML,今天我在做一个工作流授权列表的查询,里面要求根据人员.工作流名称.授权开始时间和授权结束时间找到对应的授权人,没有找到就返回本人.使用CAML QueryBuilder生成了查询,然后修改了其中的对应的变量,进行查询.结果发现查询结果有问题.原来是在CAML中使用的日期类型的表示必须是一种国内很少用的特殊的格式,,形如"2009-04-09T15:11:20Z"网上找了一下,使用SPUtility.CreateISO8601

BarTender中创建指定日期时间的方法

  1.在BarTender 2016中,创建一个文本对象,双击对象,在打开的属性对话框中,设置数据源的数据类型为"时钟". 2.切换至数据类型选项卡,设置日期时间格式.您也可以自定义日期格式. 3.切换至转换界面.单击"偏移"后的按钮,在弹出的对话框中选择偏移源.本文以常数为例. 注:偏移--指定要从当前日期和时间加上或减去的量;或者指定包含偏移值的数据库字段或具名数据源. 常数:偏移值对于每个打印的项目都相同. 按数据库字段设置:偏移值将从连接到文档的数据库中的

MS SQL Server中的 CONVERT 日期时间 格式化大全

出处:http://www.cnblogs.com/fernando/archive/2008/04/29/1176581.html  CONVERT 将某种数据类型的表达式显式转换为另一种数据类型.由于某些需求经常用到取日期格式的不同.现以下可在SQL Server中 将日期格式化. SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式. 在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值. 给 style 值加 100,可

jQuery EasyUI API 中文文档 - 日期时间框(DateTimeBox)

DateTimeBox  日期时间框 扩展自 $.fn.datebox.defaults.用 $.fn.datetimebox.defaults 重写了 defaults.     依赖 datebox timespinner 用法 1. <input id="dt" type="text"></input> 取值: $('#DateEnd').datetimebox('getValue') 1. $('#dt').datetimebox({

PL/SQL 日期时间类型函数及运算_oracle

内部存储格式: 世纪.年.月.日.小时.分钟.秒 默认格式是:DD-MON-RR. SYSDATE 返回当前的系统时间. SELECT SYSDATE FROM DUAL: 对日期的数学运算 SELECT (SYSDATE-HIRE_DATE)/7 FROM TABLENAME WHERE ROWNUM;   数字列 ADD_MONTHS(date,x)函数,返回加上X月后的日期DATE的值.X可以是任意整数.如果结果的月份中所包含的   日分量少于DATE的月份的日分量,则返回结果月份的最后一