一个相对简单的问题,我一直没能找到明确的答案。我的应用程序更复杂,但回答这个问题就足够了。
假设您正在编写一个秒表应用。当用户点击“开始”时,应用程序将当前日期和时间存储在 startTime 中:
startTime = [NSDate date];
当用户录制“stop”时,应用程序将当前日期和时间存储在 stopTime 中:
stopTime = [NSDate date];
持续时间的计算方式是:
duration = [stopTime timeIntervalSinceDate:startTime];
并显示类似:
[durationLabel setText:[NSString stringWithFormat:@"%1.2f", duration]];
我的应用计时的典型持续时间范围为 2 到 50 秒。我需要精确到 1/100 秒(例如 2.86 秒)。
我假设 iOS 设备使用某种协议(protocol)来保持其时钟准确(蜂窝或 NTP 来源?)。我担心的是,在启动和停止秒表之间,iOS 设备上的时钟会更新,这可能会导致当前日期/时间提前或向后移动。如果发生这种情况,计算的持续时间将不准确。
为了提高代码效率,我看过一些与计时方法相关的帖子。有人建议使用我不熟悉的 mach_time.h 函数。我不清楚哪种方法最好。
是否可以禁止 iOS 更新日期和时间? mach_absolute_time() 是否不受 iOS 时钟更新的影响?
非常感谢!
蒂姆
最佳答案
您正确地认为 CFAbsoluteTime 及其衍生物(NSDate 日期 等等)可能会因“实时”时间的网络更新而发生偏差。加上 NSTimer 的精度为 50-100 毫秒这一事实,您的计时器不适合最关键的时间敏感型操作。
这个问题的答案似乎是CACurrentMediaTime。
它是 Core Animation 组的成员,但将它集成到基于非动画的应用程序中应该没有任何问题。
CACurrentMediaTime 是 mach_absolute_time() 的包装器,并且理解“mach 绝对时间单位”,根据我的理解,修改它并不有趣。 mach_absolute_time() 是通过运行自设备上次启动以来的非网络同步计时器来计算的。
关于 CACurrentMediaTime 的信息相对较少,但这里有一些来源和进一步阅读:
注意:如果您使用 CACurrentMediaTime,请确保包含并链接 QuartzCore.framework
关于iOS 阻止日期/时间更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496655/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的