Datetime 从本地服务器迁移到Azure:UTC时区。如何解决?

Datetime 从本地服务器迁移到Azure:UTC时区。如何解决?,datetime,azure,utc,datetimeoffset,Datetime,Azure,Utc,Datetimeoffset,我设计我的应用程序时考虑到这样一个事实,即根据规范, 应在位于意大利的服务器上运行,且客户端仅限意大利人 大约一个月前,我的老板决定在Azure上实现这一切 一切进展顺利。唯一让我有问题的是时间服务器是UTC 解决办法是: A)简单 将启动脚本修改为服务器时间( ) B)更费力 更改以使任何应用程序使用UTC并显示正确转换为本地时间的时间 如果我选择解决方案A,我的疑问是服务器设置为不同的时区这一事实可能会以某种方式与Azure产生冲突 这是真的吗?我已经请求微软的支持 以下是回应: 不建议使用

我设计我的应用程序时考虑到这样一个事实,即根据规范, 应在位于意大利的服务器上运行,且客户端仅限意大利人

大约一个月前,我的老板决定在Azure上实现这一切

一切进展顺利。唯一让我有问题的是时间服务器是UTC

解决办法是:

A)简单

将启动脚本修改为服务器时间( )

B)更费力

更改以使任何应用程序使用UTC并显示正确转换为本地时间的时间

如果我选择解决方案A,我的疑问是服务器设置为不同的时区这一事实可能会以某种方式与Azure产生冲突


这是真的吗?

我已经请求微软的支持

以下是回应:

不建议使用启动任务更改Azure虚拟机上的服务器时间,您应该在代码中使用类似TimeZoneInfo.ConvertTimeFromutTime的方法

因此,我不会更改服务器时区。 等待支持部门的响应,我发现SQLServer2008有一个完美的DateTimeOffset数据类型


DateTime有两个问题。Now和DateTime。现在在客户端和服务器端。 当您将DateTime对象从客户端传递到Azure时,它的种类等于Local,并且包含时区信息。 (2011年6月10日上午12:30-7)

但是,将其保存到数据库时,区域信息将丢失。随后,当从数据库中读取此字段时,它会使用Utc区域创建DateTime(2011年6月10日,上午12:30)

最终,您的客户会错误地读取日期时间

有几个选项可以在客户端解决此问题

1) 在方法参数和数据库中将DateTime转换为DateTimeOffset。这将保证您的本地区域(即PST)将保存在db中

2) 使用DateTime.SpecifyKind(DateTime,DateTimeKind.Unspecified)-这样,DateTime的类型就未指定,并随后保存为数据库中的原样

var timeNow = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
serviceClient.SaveTime(timeNow);
var dateTime = serviceClient.GetTime();

小心调用DateTime。现在在服务器端。你最好使用DateTime.UtcNow。这段时间不应用于业务数据。理想的,您需要重构代码并从客户端传递DateTime或DateTimeOffset。

几年前,我开始设计我的所有应用程序,以便在客户端和服务器上使用UTC处理日期,此后就再也没有回首过。

选项A听起来很简单,但您必须确保它在日光下工作节省时间,否则你会发现夏天的每件事都是一个小时。当我遇到同样的问题时,我选择了选项B,因为这样我在国外使用该应用不会有任何问题。你能告诉我们更多关于你的架构的信息吗。它是基于web的还是windows客户端,它是否通过web服务等。那么我们应该能够为您提供更多帮助。所有windows Azure虚拟机都在UTC下,这是云的一个非常好的设计属性。选择B,你不会后悔的。@Bugeo当DateTime对象被反序列化且种类为本地时,它会将新的DateTime设置为一个新的时区,同时保留两个时区之间的差异记录。你认为DateTime和DATETIMETOFFSET是什么