Xamarin iOS 11.2中的Environment.TickCount替代

时间:2018-12-27 23:48:53

标签: c# ios time xamarin.ios

至少在iOS 11.2中,它看起来像Environment.TickCount改变了它的行为。在装有iOS 10.3的iPad上,它从设备启动起返回毫秒数。但是在装有iOS 11.2的iPhone上,它返回560066914,并且在几分钟后-560066431更少了,并且设备没有重新启动!

自设备启动以来,还有另一种获取时间的方法吗?我需要它来检查用户自上次启动应用以来是否更改了时间设置。

2 个答案:

答案 0 :(得分:1)

简单地解决:

#if __IOS__
            long run =  (long)(NSProcessInfo.ProcessInfo.SystemUptime * 1000);
#else
            long run = System.Environment.TickCount;
#endif

更新:

NSProcessInfo.ProcessInfo.SystemUptime也返回错误的值。看起来苹果在iOS 11中打破了TickCount,现在您不能再依赖它了。 “那些野兽* rds!” (r)

答案 1 :(得分:0)

您可以在Microsoft Docs中找到所需的所有信息:

  

TickCount属性每49.8天在Int32.MinValue(一个负数)和Int32.MaxValue之间循环一次。

     

由于TickCount属性值的值是一个32位有符号整数,如果系统连续运行,则TickCount将从0递增到Int32.MaxValue大约24.9天,然后跳转到Int32.MinValue,这是负数数字,然后在接下来的24.9天内增加为零。您可以通过调用Windows GetTickCount函数(大约49.7天后重置为零)或调用GetTickCount64函数来解决此问题。

如果测量DateTime.NowEnvironment.TickCount & Int32.MaxValue(这是一个正数,每24.9天重置一次),则可以确定用户是否更改了时间。