C#中 DateTime , DateTime2 ,DateTimeOffset 之间的小区别 (转载)
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 之间的小区别 (转载)的更多相关文章
- DateTime , DateTime2 ,DateTimeOffset 之间的小区别
闲来无事列了个表比对一下这3兄弟之间还是有一点差距的╮(╯_╰)╭ DateTime DateTime2 DateTimeOffset 日期范围 1753-01-01到 9999-12-31 00 ...
- mysql中DATETIME,DATE和TIMESTAMP的区别整理
简而言之.看格式,DATE 是 年月日YYYY-MM-DD,DATETIME 是 年月日时分秒YYYY-MM-DD HH:MM:SS,TIMESTAMP是 年月日时分秒YYYY-MM-DD HH:MM ...
- Python中list的删除del&remove小区别
del删除时候指定下标,remove必须指定具体的值
- php中mysql_fetch_row() 和mysql_fetch_array之间有什么区别
mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得eg:$sql="select ab ...
- Java中print、printf、println的区别(转载)
printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和print基本没什么差别,就是最后会换行 System.out.p ...
- JavaScript中var、let和const的区别(转载)
一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...
- oracle 中 cursor 与refcursor及sys_refcursor的区别 (转载)
http://blog.csdn.net/gyflyx/article/details/6889028 引用一.显式cursor 显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor ...
- php中global与$GLOBALS的用法及区别-转载
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- Java中List、Set和Map的区别--转载
List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...
随机推荐
- C# 如何在Linux操作系统下读取文件
发布在Window环境上的微服务需要部署在Linux环境上,本以为没有什么问题,结果因为一处读取文件路径的原因报错了,在此记录一下两个问题:1.C#如何判断当前运行环境是什么操作系统:2.C#读取文件 ...
- javaSE——简单的文件浏览器
import java.io.File; public class Demo02 { public static void main(String[]args){ File file = new Fi ...
- 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. 原 ...
- c# 后台异步请求接口
第一步:引用程序集:Systen.Net.Http 第一种方式: 异步 Get请求 HttpClient client = new HttpClient(); //client. ...
- Android属性动画:插值器与估值器
声明:本篇文章部分内容来自<Android开发艺术探索>. 我们都知道对于属性动画可以对某个属性做动画,而 插值器(TimeInterpolator)和 估值器(TypeEvaluator ...
- 多个raq导出一个excel2007中
需求描述: 客户以前通过润乾API把多个raq模板数据来导出到一个excel文件中,由于现在数据量过大一个raq数据就超过了65535,原来的2003接口已经满足不了现在的需求, ...
- okhttp3带cookie请求
Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一.就像下面这样: Request request = new Request. ...
- [转]How do you build a database?
非常简短的文字,却异常明了的说明了一个数据库管理系统的核心原理,原文来自原文. Its a great question, and deserves a long answer. Most datab ...
- mysqldump的假注释
今天在查看mysqldump内容的时候,发现类似注释的东西,仔细了解了下, If you add a version number after the “!” character, the synta ...
- NSMapTable、NSHashTable与NSPointerArray的封装
NSMapTable.NSHashTable与NSPointerArray的封装 说明 NSMapTable对应NSDictionary:NSHashTable对应NSSet:NSPointerArr ...