Sql server 使用SQL Server datetimeoffset

Sql server 使用SQL Server datetimeoffset,sql-server,tsql,date,datetime,Sql Server,Tsql,Date,Datetime,我试图存储在工具中设置的会议的日期、时间和时区。我允许用户指定日期和时间,并从时区列表中进行选择 我的问题是试图找出如何将所有3个部分格式化为正确的datetimeoffset来存储 我相信这是SQL Server在datetimeoffset中需要的格式: YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm] 我的第一个问题是,我的时区下拉列表的值应该是什么 其次,SQL Server中是否有内置的方法来传递此数据字符串并将其转换为datetimeoffset

我试图存储在工具中设置的会议的日期、时间和时区。我允许用户指定日期和时间,并从时区列表中进行选择

我的问题是试图找出如何将所有3个部分格式化为正确的
datetimeoffset
来存储

我相信这是SQL Server在
datetimeoffset
中需要的格式:

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]
我的第一个问题是,我的时区下拉列表的值应该是什么


其次,SQL Server中是否有内置的方法来传递此数据字符串并将其转换为
datetimeoffset
所需的格式?

如果您的工具可以从时间转换为字符串,请将其转换为包含的格式。
[.nnnn]
部分用于纳秒。我还没有看到一个应用程序需要这样的准确度。如果您对二级精度满意,
datetimeoffset(0)
就足够了

例如:

DECLARE @time_str varchar(30) = '2015-01-19 7:20:00 -08:00'
DECLARE @time datetimeoffset(0) = CONVERT(datetimeoffset, @time_str)

SELECT DATEPART(YEAR, @time),
       DATEPART(MONTH, @time),
       DATEPART(DAY, @time),
       DATEPART(HOUR, @time),
       DATEPART(MINUTE, @time),
       DATEPART(SECOND, @time),
       DATEPART(TZOFFSET, @time)

是的,DateTimeOffset正是您想要的

其次,可用偏移的选择列表应来自ISO列表()

SQL Server不关心真实世界中是否存在时区偏移,它只需要有效。以下是一些示例:

CREATE TABLE #tmp1 (dto DATETIMEOFFSET);

INSERT INTO #tmp1 ( dto ) VALUES  ( SYSDATETIMEOFFSET() ) --system timestamp
INSERT INTO #tmp1 ( dto ) VALUES  ( '2015-01-19 7:20:00 -08:00' ) --valid date, time, and offset
INSERT INTO #tmp1 ( dto ) VALUES  ( '2015-01-19 7:20:00 -08:16' ) --vaid date, valid time, made up offset that doesn't exist in the real world.

SELECT *
FROM #tmp1

日期没有格式。它们是二进制值。格式仅在转换/解析字符串时适用。使用参数化查询和datetimeoffset类型的参数,您将不必在allAwesome进行解析,因此现在我只需要弄清楚如何使用其偏移值生成时区列表;谢谢@SBB DateTimeOffset仅包括偏移量,不包括时区。除了Windows(操作系统)之外,所有人都使用
tzData
数据库。检查Jon Skeet的节点时间库,该库处理时区、偏移量并包括TZDATA。这就是我的意思,我将向用户提供一个时区列表,但该值将是偏移量,该偏移量将与日期和时间组合使用,以提供
日期时间偏移量
,对吗?