gpt4 book ai didi

ios - 计算年、月、日中2个NSDate之间的差异忽略时间?

转载 作者:行者123 更新时间:2023-11-28 23:30:17 26 4
gpt4 key购买 nike

举个例子,我有 2 个 NSDate 在同一个时区 UTC

NSDate *date1 = [NSDate dateWithString:@"2019-05-31 22:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2019-06-01 01:00:00 +0000"];

我想制作一个函数来计算它们在年、月、日中忽略时间部分的差异。期待以上结果

Year: 0

Month: 1

Day: 1

或者另一个例子

NSDate *date1 = [NSDate dateWithString:@"2019-02-28 22:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2020-03-01 01:00:00 +0000"];

会得到结果

Year: 1

Month: 13

Day: 367

我试过这个问题的答案How can I calculate the difference between two dates?

但是那些使用 NSTimeInterval 的方法似乎并不可靠,因为一年中有 365 天或 366 天,并且不会忽略时间。回复喜欢

NSDateComponents *components;
NSInteger days;

components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: date1 toDate: date2 options: 0];
days = [components day];

也给出了错误的结果。

最佳答案

您可以使用 NSCalendarcomponentsInTimeZone:fromDate: 方法将每个 NSDate 值转换为 NSDateComponents 值.这将为您提供两个日期的年、月和日值,现在实现您的差异算法,可能是:

  • 从较大的日期中减去较早的日期 - 您可以通过比较两个 NSDate 值来确定
  • 年份差异只是简单减去 NSDateComponents 值的年份部分
  • 月份差异是月份组成部分之间的差异,如果是负数则加 12
  • 日差类似,但在负的情况下,您必须添加月份的长度,即 28、29、30 或 31 - 计算出哪个作为练习:-) (NSCalendar/NSDate 方法应该在这里有所帮助)

虽然对您所需算法的猜测可能是错误的,但无论您使用什么算法,您都应该能够根据年、月和日组件来实现它。

更新

所以我对你的算法的第一个猜测是错误的,我的第二个猜测是你的三个差异;年、月、日;都是相应单位差异的独立近似值。所以年差忽略了月、日和时间;月份差异忽略了日期和时间;并且天数差异忽略了时间。这就是为什么 5 月 31 日和 6 月 1 日相隔“1 个月”——这一天被忽略。当然,这种猜测也可能是错误的,但具体做法如下:

  • 给您安排两个日期,这样差异就会是正值。
  • 仅获取年、月和日部分(或者全部获取然后丢弃其他部分)——这将丢弃时间部分。使用 NSCalendar 的方法之一来执行此操作。
  • 您的年份差异只是年份组成部分之间的差异
  • 月份差异是月份组成部分之间的差异(可能为负数)加上年份差异的 12 倍
  • 可以使用 components:fromDateComponents:toDateComponents:options: 请求日期组件来找到日期差异

[注意:请小心使用与原始日期相同的时区 - 这有点复杂,因为您可能需要自己从日期字符串中提取它(提取 +hhmm 并创建一个时区)。您必须记住,NSDate 不存储时区,它只是一个绝对时间点(因此不同时区的等效时间会产生相同的 NSDate 值)并且对于您希望它们基于原始时区进行计算,因为一个时区同一天的两次可以在不同时区的不同日期进行......)。您可以设置 NSCalendar 实例的时区,或使用在从 NSDate 转换为 NSDateComponents 时采用时区的方法]

关于ios - 计算年、月、日中2个NSDate之间的差异忽略时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com