计算当前时间和下一个事件之间的秒数

2023-12-03

这应该很简单,但事实证明这对我来说具有挑战性。我想知道计算之间的秒数差异的最佳方法[NSDate date]以及从那时起 x 秒后发生的未来事件。有几种不同类型的事件,每个事件可能一天发生几次,并且在不同的时间发生,具体取决于它发生在一周中的哪一天。

我想做的是让用户从选择器中选择一个事件类型,然后根据他们的选择在通知中心为该事件的下一次发生设置警报。除了秒计算之外,我一切正常。

举例来说,假设现在是星期一上午 9 点。我想确定从现在到用户选择的事件(该事件每周二、周四和周六上午 10 点、下午 4 点和晚上 11 点或周日下午 1 点定期发生)之间需要多少秒。您将如何最有效地解决这个问题?


当您谈论“下周四下午 1 点”之类的时间或日期时,这些信息仅在日历上下文中才有意义。NSDate不会为您提供太多帮助。也许更合适的名字是NSPointInTime。它只是从某个较早的任意参考时间点过去的几秒钟。它没有工作日、午前/午后、甚至一天中的几个小时的概念。

确实知道这类事情的两个对象是NSDateComponents and NSCalendar。他们共同努力,可以创造一个NSDate来自“下周四下午 1 点”这样的规范。

您可以使用将任何日期分解为多个组件-[NSCalendar components:fromDate:],然后您可以使用其他NSDateComponents对象对各个信息进行算术运算。例如,找出今天是星期几,以及它与星期四的区别。然后使用-[NSCalendar dateByAddingComponents:toDate:options:]根据该偏移量创建一个新日期。

@interface NSCalendar (NextWeekday)

- (NSInteger)maxWeekday;

- (NSDate *)dateFromComponents:(NSDateComponents *)comps
                forNextWeekday:(NSInteger)weekday
                        atHour:(NSInteger)hour;

@end

@implementation NSCalendar (NextWeekday)

- (NSInteger)maxWeekday
{
    return [self maximumRangeOfUnit:NSWeekdayCalendarUnit].length;
}

- (NSDate *)dateFromComponents:(NSDateComponents *)comps
                forNextWeekday:(NSInteger)weekday
                        atHour:(NSInteger)hour
{
    NSInteger diff = weekday - [comps weekday];
    if( diff < 0 ){
        diff += [self maxWeekday];
    }

    NSDateComponents * weekdayOffset = [NSDateComponents new];
    [weekdayOffset setWeekday:diff];

    [comps setHour:hour];

    return [self dateByAddingComponents:weekdayOffset
                                 toDate:[self dateFromComponents:comps]
                                options:0];
}


@end

#define GREGORIAN_THURSDAY 5

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSCalendar * cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

        NSDateComponents * wednesday = [NSDateComponents new];
        [wednesday setDay:3];
        [wednesday setWeekday:4];
        [wednesday setMonth:6];
        [wednesday setYear:2013];

        NSDateComponents * friday = [NSDateComponents new];
        [friday setDay:5];
        [friday setWeekday:6];
        [friday setMonth:6];
        [friday setYear:2013];

        NSDateComponents * now = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSWeekdayCalendarUnit
                                        fromDate:[NSDate date]];


        NSDateComponents * lastSatOfDecember = [NSDateComponents new];
        [lastSatOfDecember setDay:29];
        [lastSatOfDecember setWeekday:7];
        [lastSatOfDecember setMonth:12];
        [lastSatOfDecember setYear:2012];

        NSLog(@"From Wednesday: %@", [cal dateFromComponents:wednesday
                                              forNextWeekday:GREGORIAN_THURSDAY
                                                      atHour:13]);
        NSLog(@"From Friday: %@", [cal dateFromComponents:friday
                                           forNextWeekday:GREGORIAN_THURSDAY
                                                   atHour:13]);
        NSLog(@"From now: %@", [cal dateFromComponents:now
                                        forNextWeekday:GREGORIAN_THURSDAY
                                                atHour:13]);
        NSLog(@"Crossing over the year: %@", [cal dateFromComponents:lastSatOfDecember
                                                     forNextWeekday:GREGORIAN_THURSDAY
                                                             atHour:13]);

    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算当前时间和下一个事件之间的秒数 的相关文章

  • 检查包含 URL 的字符串“http://”

    我正在尝试检查用户输入的 URL 但我正在与一些错误和警告作斗争 BOOL textFieldShouldReturn UITextField textField check http NSString check textField te
  • Objective C 中最好的多线程方法?

    我正在开发一个 iPad 应用程序 目前正在努力寻找多线程的最佳方法 让我用一个简化的例子来说明这一点 我有一个包含 2 个子视图的视图 一个目录选择器和一个包含所选目录中所有图像缩略图的图库 由于 下载 和生成这些缩略图可能需要相当长的时
  • 获取动画 UIImageview 的坐标

    我正在水平位置对 UIImageview 进行动画处理 为此我使用了下面的代码我使用了 NSTimer timer NSTimer scheduledTimerWithTimeInterval 0 2 target self selecto
  • 在 UIScrollView 中滚动而不触发 TouchCancelled

    Overview 我正在开发一款 iPhone 游戏 其代码是从另一位开发人员那里继承的 游戏网格是一个 contentSize 为 1000x1000 的 UIScrollView 网格包含通过 OpenGL 的 Texture2D 类在
  • NSMenu 未调用 validateMenuItem 或 menuWillOpen

    我的 Mac 应用程序有一个 NSMenu 其委托功能validateMenuItem and menuWillOpen从来没有被调用过 到目前为止 网上的解决方案都没有帮助 看来我做的一切都是对的 菜单项的选择器属于同一类 管理它的类继承
  • 如何使用 Swift 将文本复制到剪贴板/粘贴板

    我正在寻找一个干净的示例 说明如何将文本复制到 iOS 剪贴板 然后可以在其他应用程序中使用 粘贴 该功能的好处是可以快速复制文本 无需传统文本复制的标准文本突出显示功能 我假设关键课程位于UIPasteboard 但在中找不到相关区域他们
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 重新安装我的 iPad 应用程序时,ApplicationIconBadgeNumber 未重置。

    我正在使用以下代码设置我的 applicationIconBadgeNumber UIApplication sharedApplication setApplicationIconBadgeNumber theIntToDisplay 问
  • 为什么我的 NSTableView 中的图像淡出?

    首先 有一个NSArrayController 服务器 其内容是 服务器 对象的数组 我也有一个NSTableView与一列 该列绑定到服务器的 arrangedObjects status 属性 我用的是自定义的NSValueConver
  • 为什么 animateWithDuration 动画和完成块之间会暂停?

    按照Apple的建议 我通过将后续调用链接到UIView动画 animationWithDuration animation in the completion 阻止另一个调用aanimateWithDuration animation c
  • 从现在起测量时间间隔

    任何人都知道或可以提供一些与 timeIntervalSinceNow 方法相关的示例代码 我需要类似的东西 time2 当应用程序进入前台时 time1 当应用程序进入后台时 time3 时间差 这样我就可以使用这个数字 以秒为单位的首选
  • 使用 Python 查找 Mac OS X 中的当前活动窗口

    有没有办法使用 Python 在 Mac OS X 上查找给定时间当前活动窗口的应用程序名称 这应该有效 usr bin python from AppKit import NSWorkspace activeAppName NSWorks
  • Swift 中 UIViewController 子类成员的双重初始化

    我想制作一个自定义容器视图控制器并向其子类添加一些成员UIViewController 当我尝试使用以下代码从应用程序委托初始化它时 self window UIWindow frame UIScreen mainScreen bounds
  • 如何使用NSDecimalNumber?

    我正在构建一个需要对金钱进行计算的应用程序 我想知道如何正确使用 NSDecimalNumber 特别是如何从整数 浮点数和双精度数初始化它 我只发现它很容易使用 decimalNumberWithString 方法 这 initWith
  • 如何自定义 NSSlider

    我正在尝试在 Cocoa 中实现一个具有 5 个值的自定义滑块 查看我的演示项目 可以在此处下载 http s000 tinyupload com index php file id 07311576247413689572 http s0
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 从 Plist 中存储和检索 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 在 plist 文件中存储两个 NSMutableArray https stackoverflow com questions 6070568 ios store two nsmutable
  • 解析和更改 NSPredicate

    我必须将数据从以前的应用程序版本迁移到新版本 这也会影响一些谓词 NSPredicate实例 由用户保存 这意味着我必须以编程方式更改它们 目前我尝试解析我得到的字符串 NSPredicate predicateFormat 并手动更改一些
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • iPhone 标签栏上的未读计数

    在 Cocoa Touch 上实现 TabBar 上图标的未读计数的最佳方法是什么 我想模仿 SMS 或邮件应用程序的行为 向我的应用程序的用户显示未读消息计数 并使用包含数字的红点 您正在寻找的属性称为徽章 您可以通过执行以下操作来设置它

随机推荐

  • 删除 Spark 字符串列的第一个字符

    我想知道正如我在标题中所说 对于以下两种情况 如何删除 Spark 字符串列的第一个字符 val myDF1 Seq 14326 1258634 15626 163262 toDF A val myDF2 Seq a14326 c12586
  • 用于查找未使用的包含标头的工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 I know PC Lint可以告诉您有关包含但未使用的标头的信息 有没有其他工具可以做到这一点 最好是在 Linux 上 我们有一个庞大的代码库 在过去 15 年里 大量的功能发生
  • JSON 规范以及 BOM/charset-encoding 的使用

    我一直在阅读RFC 4627规范 我得出了解释 当将有效负载广告为application json哑剧类型 there MUST be no BOMs 位于正确编码的 JSON 流的开头 基于 3 编码 部分 以及 不支持媒体参数 因此 m
  • 保持 Promise 链的可读性

    我已经习惯了承诺链接数组 当每个承诺都是一行长时 读取承诺链非常容易 例如 myArray map x gt convertX filter whatever etc 这非常容易阅读 然而 当我使用自定义函数创建承诺链时 它会变得更加混乱
  • 将包含数组的字符串转换为实际数组[重复]

    这个问题在这里已经有答案了 我不知道为什么我在这件事上遇到这么多麻烦 这看起来应该很简单 我有一个如下所示的 JavaScript 字符串 var str 1 2 3 4 5 6 7 8 9 我实际上想将其转换为数组的数组 str spli
  • 使用 SQL 脚本创建用户、映射到数据库并为该数据库分配角色

    我以前做过这个 但不是通过脚本 我必须在 SQL Server 中创建一个新用户 SQL 身份验证 并将用户映射到数据库 并使用 SQL 脚本将用户的角色分配给该数据库 我该怎么做 Try CREATE USER Username FOR
  • 通过 pip 安装 pygame

    我正在尝试在 python 2 7 中安装 pygame 我在这个 python 中执行此操作 因为出于某种原因 如果我尝试在 python 3 7 中安装 pip 它将无法工作 从我输入的终端 sudo pip install pygam
  • 页面中存在多个表单或多个提交?

    我正在创建一个页面 其中包含网站上销售的产品 我想在每个产品附近添加一个 添加到购物车 按钮 其中列出的标记与此类似 h4 class productHeading Product Name 1 h4 div Extra informati
  • 登录错误:登录此应用程序时出现错误。请稍后再试

    我收到这个错误 当我尝试使用 Facebook 登录我的应用程序时 当我第一次验证时它会正常工作 在我卸载我的应用程序并现在尝试使用 Facebook 登录后 我收到此错误 另一个问题 在 device1 中进行身份验证并尝试在 devic
  • ejbFacade 为空

    我从 jsf 页面 overzichtAlleGroepen xhtml 调用 ManagedBean OverzichtAlle java 但是当我进入此页面时 我收到错误消息can t instantiate Managed Beans
  • 允许 PHP 脚本访问文件夹中的 PDF - 但阻止直接 URL 引用

    在使用 CPanel 的 godaddy 托管网站上 我有一个小型 PHP 脚本 用于显示服务器上文本文件中的每一行 每行都包含一个指向 PDF 的私有 href 链接 只有登录用户才能看到 这些链接指向服务器上同一文件夹中的各种 PDF
  • 获取此 DIV 的父 ID

    当在 jquery javascript 中的 buttonleft0 中单击按钮时 我希望从此布局中找到父 div id 即 Bakerloo div class box bakerloo p p span class buttons s
  • 在 pandas 数据框中按组中的最大值选择行

    我有一个通过创建的数据框df pivot type start end F Type to date A 20150908143000 345 316 B 20150908140300 NaN 480 20150908140600 NaN
  • 线程“main”中的异常 java.net.ConnectException:连接被拒绝:连接 Socket 编程 Java

    我最近学习了客户端和服务器之间的套接字编程 所以我想到做一个连接客户端和服务器的练习 但是 当我尝试运行代码时遇到此错误消息 线程 主 java net ConnectException 中出现异常 连接被拒绝 连接 这是我的客户端类代码
  • 读取序言中的输入并打印结果

    我正在学习 Prolog 的思想 这是我想要练习的 我想编写一个可以像这样工作的 Prolog 程序 input apple is fruit input chicken is meat input Is apple meat No it
  • 使用 XMLUnit 2.X 比较 xml 文件时忽略特定节点的特定属性

    我有两个 XML 文件
  • 如何使用 rgba16Float MTLPixelFormat 显示 MTKView

    我有一个 MTKView 设置为使用 MTLPixelFormat rgba16Float 我遇到了显示问题 可以用下图来最好地描述 因此 预期的 UIColor 会被褪色 但仅限于在 MTKView 中显示时 当我通过 CIIMage 将
  • Manifest.lock 给出关于 Podfile.lock 的警告,是什么原因造成的?

    1 我多次尝试更新 cocoapods 并为我的项目重新安装 pod 但清单锁看起来还是有问题 我的应用程序运行良好 会影响以后的事情吗 我该如何解决 2 另外Pods 项目名称 frameworkXcode 导航器中有红色标题 我继续开发
  • 如何将 scipy.stats.describe 输出加载到 pandas 数据框中?

    有没有一种简单直接的方法来加载输出sp stats describe 到 DataFrame 中 包括值名称 它似乎不是字典格式或相关的东西 当然 我可以手动附加相关的列名称 见下文 但想知道是否可以直接加载到具有命名列的 DataFram
  • 计算当前时间和下一个事件之间的秒数

    这应该很简单 但事实证明这对我来说具有挑战性 我想知道计算之间的秒数差异的最佳方法 NSDate date 以及从那时起 x 秒后发生的未来事件 有几种不同类型的事件 每个事件可能一天发生几次 并且在不同的时间发生 具体取决于它发生在一周中