2

TimeZoneInfo.Local.Id在 MonoTouch 上使用时,我得到CET(中欧时间)。在 ASP.NET 上,我得到Central Europe Standard Time.

我需要将时区从 iOS 设备 (MonoTouch) 传输到我的 ASP.NET Web 服务。仅传输时区差异 (UTC +1) 是不够的,因为这不符合特定国家/地区的夏令时设置。

将 iPhone 的时区获取到我的网络服务的最佳方式是什么?

4

3 回答 3

4

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);
于 2012-04-16T12:59:46.930 回答
1

由于设备不同 - 我会考虑推导两者之间的映射。

可能您的 Monotouch 应用程序应该这样做 - 对于可用时区中列出的每个 TimeZoneInfo Id,将映射存储到服务器上相同 TimeZoneInfo 的 Id。

另外,请注意,服务器上的时区是由 Windows 更新驱动的,并且可能不一定在每个 Web 服务器上都相同(如果你有一个农场)——正如我前几天在我的一个 Web 应用程序中发现的那样让我很烦恼。欲了解更多信息:http: //support.microsoft.com/gp/cp_dst

于 2012-04-16T12:42:12.513 回答
1

TimeZoneInfo在 Windows 上使用 Windows 时区 ID——而在 MonoTouch 上,它可能会使用任何 iOS ID(尽管我有点惊讶你得到的是 CET 而不是 zoneinfo 名称)。

即使您在两者之间进行映射,我也不总是期望得到相同的结果。Windows 将在不同时间将时区信息更新到 iOS。您应该在单个系统上执行所有时区计算,或者两个地方使用您自己的“嵌入式”时区实现以确保一致性。我的Noda Time项目可能在这里工作,但我从未尝试在 MonoTouch 中使用它。

于 2012-04-16T12:43:39.593 回答