SQL ServerAzure 上SQL Database(PaaS)Time Zone时区难点处理(进阶篇)

参照上贰个Blog 《Azure 上SQL Database(PaaS)提姆e Zone时区难题处理》,大家一样要来消除时区的题目,我们创立appcount表时,大家应用上边语句

CREATE TABLE [dbo].[appcount2]( 
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [createtime] [datetime] NULL, 
    [CreatetimeWithOffset] [Datetimeoffset] NULL,
    PRIMARY KEY CLUSTERED (Id) 
)

布置数据时采取

INSERT INTO    appcount(createtime,createtimewithoffset) VALUES(GetDate(),sysdatetimeoffset() AT TIME ZONE 'China Standard Time')

插入完数据我们将数据在查询出来

SQL Server 1

SQL Server 2

我们会发现DateTimeOffset在拍卖时区难点时不管带不带时区的动员搬迁语句的出来的光阴都是正确的,不过Date提姆e字段的出来的时光显明就会有时光偏移错误。

咱俩用上边的C#从.NET程序里面将那么些时间数据收取来会怎么着呢?

using (IDbConnection conn = new System.Data.SqlClient.SqlConnection(strConn))

            {
                conn.Open();
                var command = conn.CreateCommand();
                command.CommandText = "Select  id,createtime,CreatetimeWithOffset from appcount";
                var reader = command.ExecuteReader();
                while (reader.Read())
                {
                    var id = reader["id"];
                    var date = reader["createtime"];
                    var date2 = reader["createtimeWithOffset"];
                    var localDate = ((DateTimeOffset)date2).LocalDateTime;
                    Console.WriteLine("id:{0},createtime:{1},DateTimeInOffSet:{2},localdate:{3}", id, date,date2, localDate);
                }
                reader.Close();
                conn.Close();
            }

 

此间是代码实施结果:

SQL Server 3

 

小结:

采用DatetimeOffset来存款和储蓄时间,通过DatetimeOffset来拍卖时间能够让你的代码特别沉稳,尤其范冰水晶室女士(Fan Bingbing)

 

连锁小说:《Azure 上SQL Database(PaaS)Time
Zone时区难题处理

在SQL
Server数据库处理时间相关的数额时,大家平常会选择DateTime类型可能DateTime二类型来处理数据,其实早在SQL
Server
二零零六颁发时,数据库就开端帮忙DatetimeOffset.aspx)数据类型了,DatetimeOffset天生出来就是为了处理时区难题的

平日ISV在直面地方客户时对时间相关的处理,壹般都时区音信都是不灵敏的。不过今后云的社会风气里为了让我们把日子拍卖的格局统一齐来,云上的劳动都以以UTC时间为准的,以往一旦作为贰个ISV来讲就算你面对的客户只是本地用户不过你打算采取云来为您举办的行使提供越多的法力和便捷性时,你就须要利用UTC时间来拍卖跟相关的代码了。

SQL Server 4

相关文章