SQL Server中DateTime , DateTime2 ,DateTimeOffset的区别

闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭

 
DateTime
DateTime2
DateTimeOffset
日期范围
1753-01-01到 9999-12-31
0001-01-01 到 9999-12-31
0001-01-01 到 9999-12-31
时间范围
00:00:00 到 23:59:59.997
00:00:00 到 23:59:59.9999999
00:00:00 到 23:59:59.9999999
存储字节大小
8字节
精度小于 3 时为 6 个字节;精度为 3 和 4 时为 7 个字节。 所有其他精度则需要 8 个字节
精度小于 3 时为 6 个字节;精度为 3 和 4 时为 7 个字节。 所有其他精度则需要 8 个字节
精度
舍入到 .000、.003 或 .007 秒三个增量。
100 纳秒
100 纳秒
支持自定义小数精度
时区
-14:59 到 +14:59

至于 DateTimeOffset ,时间部分都是UTC时间。
比方说现在我们在GMT+8:00 的位置,所以当地时间是 2019-12-09 21:33:26,如果用DateTimeOffset 来表示就是 2019-12-09 13:33:26 -08:00

DECLARE @dto DATETIMEOFFSET(7)=N'2019-12-09 21:33:26 +08:00'
DECLARE @dtLocal DATETIME=N'2019-12-09 21:33:26'
DECLARE @dtUTC DATETIME=N'2019-12-09 13:33:26' SELECT @dto,@dtLocal,DATEDIFF(HH,@dto,@dtLocal),@dtUTC,DATEDIFF(HH,@dto,@dtUTC)

结果如下:

然后就是在SQL Server中,当DateTimeOffset 转格式成为其它2兄弟的时候,时区会被舍去的啊……的啊……的啊

DECLARE @dto DATETIMEOFFSET(7)=SYSDATETIMEOFFSET()
SELECT @dto,CAST(@dto AS DATETIME),CAST(@dto AS DATETIME2(7))

结果如下:

原文链接

C#中DateTime和DateTimeOffset的区别

可以理解为DateTimeOffset是带时区偏差的DateTime,如下MSDN代码所示:

using System;
using System.Collections.ObjectModel; public class TimeOffsets
{
public static void Main()
{
DateTime thisDate = new DateTime(, , , , , );
DateTime dstDate = new DateTime(, , , , , );
DateTimeOffset thisTime; thisTime = new DateTimeOffset(dstDate, new TimeSpan(-, , ));
ShowPossibleTimeZones(thisTime); thisTime = new DateTimeOffset(thisDate, new TimeSpan(-, , ));
ShowPossibleTimeZones(thisTime); thisTime = new DateTimeOffset(thisDate, new TimeSpan(+, , ));
ShowPossibleTimeZones(thisTime);
} private static void ShowPossibleTimeZones(DateTimeOffset offsetTime)
{
TimeSpan offset = offsetTime.Offset;
ReadOnlyCollection<TimeZoneInfo> timeZones; Console.WriteLine("{0} could belong to the following time zones:",
offsetTime.ToString());
// Get all time zones defined on local system
timeZones = TimeZoneInfo.GetSystemTimeZones();
// Iterate time zones
foreach (TimeZoneInfo timeZone in timeZones)
{
// Compare offset with offset for that date in that time zone
if (timeZone.GetUtcOffset(offsetTime.DateTime).Equals(offset))
Console.WriteLine(" {0}", timeZone.DisplayName);
}
Console.WriteLine();
}
}
// This example displays the following output to the console:
// 6/10/2007 12:00:00 AM -07:00 could belong to the following time zones:
// (GMT-07:00) Arizona
// (GMT-08:00) Pacific Time (US & Canada)
// (GMT-08:00) Tijuana, Baja California
//
// 3/10/2007 12:00:00 AM -06:00 could belong to the following time zones:
// (GMT-06:00) Central America
// (GMT-06:00) Central Time (US & Canada)
// (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
// (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
// (GMT-06:00) Saskatchewan
//
// 3/10/2007 12:00:00 AM +01:00 could belong to the following time zones:
// (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
// (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
// (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
// (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
// (GMT+01:00) West Central Africa

微软官方对C#中DateTime和DateTimeOffset区别的解释:

Choosing between DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo

C#中 DateTime , DateTime2 ,DateTimeOffset 之间的小区别 (转载)的更多相关文章

  1. DateTime , DateTime2 ,DateTimeOffset 之间的小区别

    闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭   DateTime DateTime2 DateTimeOffset 日期范围 1753-01-01到 9999-12-31 00 ...

  2. mysql中DATETIME,DATE和TIMESTAMP的区别整理

    简而言之.看格式,DATE 是 年月日YYYY-MM-DD,DATETIME 是 年月日时分秒YYYY-MM-DD HH:MM:SS,TIMESTAMP是 年月日时分秒YYYY-MM-DD HH:MM ...

  3. Python中list的删除del&remove小区别

    del删除时候指定下标,remove必须指定具体的值

  4. php中mysql_fetch_row() 和mysql_fetch_array之间有什么区别

    mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得eg:$sql="select ab ...

  5. Java中print、printf、println的区别(转载)

    printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和print基本没什么差别,就是最后会换行 System.out.p ...

  6. JavaScript中var、let和const的区别(转载)

    一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...

  7. oracle 中 cursor 与refcursor及sys_refcursor的区别 (转载)

    http://blog.csdn.net/gyflyx/article/details/6889028 引用一.显式cursor 显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor ...

  8. php中global与$GLOBALS的用法及区别-转载

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  9. Java中List、Set和Map的区别--转载

    List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...

随机推荐

  1. C# 如何在Linux操作系统下读取文件

    发布在Window环境上的微服务需要部署在Linux环境上,本以为没有什么问题,结果因为一处读取文件路径的原因报错了,在此记录一下两个问题:1.C#如何判断当前运行环境是什么操作系统:2.C#读取文件 ...

  2. javaSE——简单的文件浏览器

    import java.io.File; public class Demo02 { public static void main(String[]args){ File file = new Fi ...

  3. Atitit.resin  could not create the java virtual machine问题

    Atitit.resin  could not create the java virtual machine问题 1. 正常的参数是这样1 2. 错误的cmd运行时候的参数1 3. 输出2 4. 原 ...

  4. c# 后台异步请求接口

    第一步:引用程序集:Systen.Net.Http 第一种方式: 异步 Get请求 HttpClient client = new HttpClient();            //client. ...

  5. Android属性动画:插值器与估值器

    声明:本篇文章部分内容来自<Android开发艺术探索>. 我们都知道对于属性动画可以对某个属性做动画,而 插值器(TimeInterpolator)和 估值器(TypeEvaluator ...

  6. 多个raq导出一个excel2007中

     需求描述:         客户以前通过润乾API把多个raq模板数据来导出到一个excel文件中,由于现在数据量过大一个raq数据就超过了65535,原来的2003接口已经满足不了现在的需求, ...

  7. okhttp3带cookie请求

    Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一.就像下面这样: Request request = new Request. ...

  8. [转]How do you build a database?

    非常简短的文字,却异常明了的说明了一个数据库管理系统的核心原理,原文来自原文. Its a great question, and deserves a long answer. Most datab ...

  9. mysqldump的假注释

    今天在查看mysqldump内容的时候,发现类似注释的东西,仔细了解了下, If you add a version number after the “!” character, the synta ...

  10. NSMapTable、NSHashTable与NSPointerArray的封装

    NSMapTable.NSHashTable与NSPointerArray的封装 说明 NSMapTable对应NSDictionary:NSHashTable对应NSSet:NSPointerArr ...