TimeZoneInfo.Local.Id
在 MonoTouch 上使用时,我得到CET
(中欧时间)。在 ASP.NET 上,我得到Central Europe Standard Time
.
我需要将时区从 iOS 设备 (MonoTouch) 传输到我的 ASP.NET Web 服务。仅传输时区差异 (UTC +1) 是不够的,因为这不符合特定国家/地区的夏令时设置。
将 iPhone 的时区获取到我的网络服务的最佳方式是什么?
TimeZoneInfo.Local.Id
在 MonoTouch 上使用时,我得到CET
(中欧时间)。在 ASP.NET 上,我得到Central Europe Standard Time
.
我需要将时区从 iOS 设备 (MonoTouch) 传输到我的 ASP.NET Web 服务。仅传输时区差异 (UTC +1) 是不够的,因为这不符合特定国家/地区的夏令时设置。
将 iPhone 的时区获取到我的网络服务的最佳方式是什么?
MonoTouch 中的时区数据源不止一个。
一个来自 .NET 基类库 (BCL),System.TimeZoneInfo
它旨在与 Microsoft .NET 实现兼容(它是结构,而不是数据)。它有两个缺点。
它与 MS 数据不是 100% 兼容(使用了不同的数据源);
如果不使用更新的 MonoTouch 重新构建您的应用程序,它就无法更新;
另一个是MonoTouch.Foundation.NSTimeZone
与 iOS API 的绑定。API 有点不同,但它返回的数据与其他 iOS 应用程序将使用的数据相匹配,并且会更新(使用 iOS 更新)。
将 iPhone 的时区获取到我的网络服务的最佳方式是什么?
由于上述原因, IMOMonoTouch.Foundation.NSTimeZone
更适合。
仅传输时区差异 (UTC +1) 是不够的,因为这不符合特定国家/地区的夏令时设置。
至于您与 UTC 的偏移量,您可以通过以下方式获得日光特定偏移量(以秒为单位):
var dlo = NSTimeZone.LocalTimeZone.DaylightSavingTimeOffset (NSDate.Now);
由于设备不同 - 我会考虑推导两者之间的映射。
可能您的 Monotouch 应用程序应该这样做 - 对于可用时区中列出的每个 TimeZoneInfo Id,将映射存储到服务器上相同 TimeZoneInfo 的 Id。
另外,请注意,服务器上的时区是由 Windows 更新驱动的,并且可能不一定在每个 Web 服务器上都相同(如果你有一个农场)——正如我前几天在我的一个 Web 应用程序中发现的那样让我很烦恼。欲了解更多信息:http: //support.microsoft.com/gp/cp_dst
TimeZoneInfo
在 Windows 上使用 Windows 时区 ID——而在 MonoTouch 上,它可能会使用任何 iOS ID(尽管我有点惊讶你得到的是 CET 而不是 zoneinfo 名称)。
即使您在两者之间进行映射,我也不总是期望得到相同的结果。Windows 将在不同时间将时区信息更新到 iOS。您应该在单个系统上执行所有时区计算,或者在两个地方使用您自己的“嵌入式”时区实现以确保一致性。我的Noda Time项目可能在这里工作,但我从未尝试在 MonoTouch 中使用它。