根据 MSDN:
数据存储在数据库中,并像 UTC 一样在服务器中进行处理、比较、排序和索引。时区偏移量将保存在数据库中以供检索。
在您的示例中,数据将以可以转换为的二进制格式存储14 Nov 2013 23:00 -5:00
,这意味着本地日期和时间加上与 UTC 的时间偏移 -5 小时(假设这是加拿大的偏移)。
当您存储这种类型的值时,您必须自己提供偏移量,系统不会自动提供。
由于数据存储为UTC时间,便于数据的比较、排序等,同时可以随时检索原始时间偏移量。
在存储有关需要跨时区比较的事件的信息时,您通常应该存储客户端的本地时间和偏移量。
datetimeoffset
有关MSDN的更多信息。
例子
创建表并插入数据
create table dto (dto datetimeoffset(7))
insert into dto values (GETDATE()) -- inserts date and time with 0 offset
insert into dto values (SYSDATETIMEOFFSET()) -- current date time and offset
insert into dto values ('20131114 08:54:00 +10:00') -- manual way
当我选择数据时,我得到
2013-11-14 07:56:17.2300000 +00:00 -- current time, no offset so useless in this case
2013-11-14 07:56:17.2338125 +11:00 -- current time with my local offset (in Australia)
2013-11-14 08:54:00.0000000 +10:00 -- manually inserted data